SSH实例:VsCode配置

一、VsCode配置ssh免密连接

Step1 VsCode安装ssh插件

1651668467972

1651668474487

Step2 VsCode设置ssh插件

1651668506066

Step3 检查服务器配置

​ 首先查看服务器IP地址:

1
2
3
4
# Linux
ifconfig
# Windows
ipconfig

​ 检查服务器sshd使用的默认22端口是否开启

1
2
3
4
5
6
# 检查22端口状态
netstat -ntlp|grep 22
# 开启22端口
sudo ufw allow 22
# 检查22端口占用状态
lsof -i:端口号

​ 配置免密登录:先通过前文生成对应的密钥对,然后根据下列步骤在服务器上

1
2
3
4
5
6
7
8
9
10
11
12
### 开启免密登录功能 ###
vim /etc/ssh/sshd_config
### 修改一下内容 ###
# 允许秘钥登录
RSAAuthentication yes
PubkeyAuthentication yes
# 允许SSH登录ROOT用户:
PermitRootLogin yes
# 禁用密码登录(建议秘钥登录成功后再禁用)
PasswordAuthentication no
### 修改完毕后重启ssh服务 ###
service sshd restart

Step4 配置ssh设置

1651668550076

​ 修改配置文件如下:

1
2
3
4
5
Host MyUbuntu-codeLearning		# Host后接SSH连接名
Port 22 # port后接端口号
HostName 192.168.61.131 # HostName后接服务器IP地址
User wilson # User为访问时希望使用的用户名
IdentityFile ~/.ssh/id_rsa_wilsonPC-Ubuntu # IdentityFile 后是秘钥存储路径

可能遇见的错误提示:

错误一:“过程试图写入的管道不存在”

笔记本链接时失败,提示:过程试图写入的管道不存在

推测原因:之前使用Putty进行SSH链接时储存了过时的信息(配置密钥后失效过)
解决方案:解决方案就是把本地的known_hosts的原服务器信息全部删掉(根据IP地址删除),然后重新连接就可以了。

详见:https://blog.csdn.net/u013066730/article/details/119924403

错误二:免密失败

​ 提示免密失败,连接时仍然提示需要输入密码

可能原因:
(1)IdentityFile 拼写错误
(2)没有正确识别私钥文件,失败提示如下:No such file or directory

二、VsCode使用跳板机实现SSH连接

问题:
使用VsCode时,如果目标机器需要经过跳板机连接,则使用VsCode远程连接插件时,插件只能读取到跳板机的设置,而真正访问目标机器则是再跳板机的terminal终端中操作,十分的麻烦

img

解决:
使用OpenSSH与VsCode的ssh config中的proxy command完成跳转
参考: VSCode Remote ssh跳板机配置(windows平台) - 知乎 (zhihu.com)

实战:
修改~/.ssh/config中内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Host SSH跳板机实验-JumpMachine
# 跳板机的ip地址
HostName 192.168.9.65
# 跳板机的用户名
User ss
# 跳板机登录端口
Port 22
IdentityFile ~/.ssh/id_rsa-sspku

Host SSH跳板机实验-TargetMachine
# 目标机的ip地址
HostName 192.168.9.59
# 目标机的用户名
User ss
# 目标机登录端口
Port 22
# 跳板指令
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -W %h:%p SSH跳板机实验-JumpMachine
# 私钥位置(本机上的路径,不是跳板机上的路径)
IdentityFile ~/.ssh/id_rsa-sspku

注:

1.为什么一定要安装openssh?

因为在windows上VSCode使用的默认ssh工具存在实现上的问题,导致一旦我们直接使用默认ssh连接会有报错:”过程试图写入的管道不存在”(The process tried to write to a nonexistent pipe)。因此,我们务必安装openssh,并在设置ProxyCommand时使用安装好的openssh来进行连接。

2.ProxyCommand中每个参数的意义?
“-W”表示stdio forwarding模式,接着后面的%h是一个占位符,表示要连接的目标机,也就是Hostname指定的ip或者主机名。%p同样也是占位符,表示要连接到目标机的端口。这里可以直接写死固定值,但是使用%h和%p可以保证在Hostname和Port变化的情况下ProxyCommand这行不用跟着变化。