Vscode——ssh经过多级跳转,连接到目标主机和免密登录
前提:在vscode中安装好插件Remote Development
一、说明
如果要实现ssh多级跳转,那么需要使用ProxyCommand
命令。
跳转一次实现
实现Win本机 -> jumpBox -> targetBox
跳转的功能:
jumpBox(跳转名称,这是windows机器)
- 用户名:winjump
- ip: 172.168.168.168
targetBox(目标名称,这是linux机器)
- 用户名:linuxtarget
- ip: 10.200.10.10
代码实现
文件:C:\Users\Myname\.ssh\config (Myname为Win本机用户名)
VScode窗口,左下角“><SSH” 点击 ,Connect to Host… ,Configure SSH Hosts… 找到C:\Users\color.ssh\config,即可编辑文件
Host jumpBox
HostName 172.168.168.168
# Port port_id
User winjump
Host targetBox
HostName 10.200.10.10
# Port port_id
User linuxtarget
ProxyCommand ssh -q -W %h:%p jumpBox
免密登录方法:
每个host下加一句:IdentityFile 私钥
Host jumpBox
HostName 172.168.168.168
# Port port_id
User winjump
IdentityFile "C:\Users\Myname\.ssh\id_rsa"
(这是Win本机的私钥id_rsa,
还要把Win本机的公钥id_rsa.pub内容要拷贝到jumpBox的~/.ssh/authorized_keys文件中)
Host targetBox
HostName 10.200.10.10
# Port port_id
User linuxtarget
ProxyCommand ssh -q -W %h:%p jumpBox
IdentityFile "C:\Users\Myname\.ssh\id_ed25519_winjumpBox"
(这是jumpBox的私钥id_ed25519_winjumpBox,把它拷贝到了Win本机的C:\Users\Myname\.ssh\目录下,
而jumpBox的公钥id_ed25519.pub内容要拷贝到该targetBox的~/.ssh/authorized_keys文件中)
这些设置完,还需要在jumpBox这台windows机器上,到C:\ProgramData\ssh\sshd_config
下(首次启动sshd后会生成该文件夹),打开sshd_config文件,
修改文件(以下是重点):
确保以下3条没有被注释
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
确保以下2条有注释掉
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
其余不做修改,基本都是已注释不启用。
重启服务:Restart-Service sshd
ssh config文件帮助,可以在Linux使用命令查看man ssh_config
具体见:多台WIN10之间的SSH免密登录 - 知乎
注意项:
若设置完,另一个cmd或powershell窗口的ssh无法登录,显示“Permission denied (publickey,keyboard-interactive).”
需要修改,PasswordAuthentication no
为PasswordAuthentication yes
。
文件位置(C:\ProgramData\ssh\sshd_config
)
然后再Restart-Service sshd
解决每次弹出“vscode select the platform of the remote host”办法
设置每个host默认的登录环境:
文件位置:C:/Users/Myname/AppData/Roaming/Code/User/settings.json
在大括号内{},添加如下,注意别忘了逗号“,” ,去掉省略号:
{
...
"remote.SSH.remotePlatform": {
"jumpBox": "windows",
"targetBox": "linux"
},
...
}
注意冒号:前面的是上面.ssh\config文件中的Host名字。后面的是固定写法有linux/windows/macOS
原文:ssh - Can’t connect VS Code to Linux machine for remote development - Stack Overflow
SSH方法登录windows,见:如何使用 SSH 远程控制一台 Windows 服务器
跳转二次
实现 Win本机 -> jumpBox -> jump2Box -> targetBox
跳转的功能:
jumpBox(跳转host名称)
- 用户名:winjump
- ip: 172.168.168.168
jump2Box(跳转host名称)
- 用户名:win2jump
- ip: 172.168.168.111
targetBox(目标host名称)
- 用户名:linuxtarget
- ip: 10.200.10.10
代码实现
文件:C:\Users\Myname\.ssh\config
Host jumpBox
HostName 172.168.168.168
# Port port_id
User winjump
Host jump2Box
HostName 172.168.168.111
# Port port_id
User win2jump
ProxyCommand ssh -q -W %h:%p jumpBox
Host targetBox
HostName 10.200.10.10
# Port port_id
User linuxtarget
ProxyCommand ssh -q -W %h:%p jump2Box
在左侧电脑图标(远程资源管理器),选择要连接的Host即可。
帮助
ssh config文件帮助,可以在Linux使用命令查看man ssh_config
常用配置选项¶
必须配置
Host:指定配置块
User:指定登录用户
Hostname:指定服务器地址,通常用ip地址
Port:指定端口号,默认值为22
可选
IdentityFile:指定认证私钥文件
ForwardAgent yes:允许ssh-agent转发
IdentitiesOnly:指定ssh是否仅使用配置文件或命令行指定的私钥文件进行认证。值为yes或no,默认为no,该情况可在ssh-agent提供了太多的认证文件时使用
StrictHostKeyChecking:有3种选项
ask:默认值,第一次连接陌生服务器时提示是否添加,同时如果远程服务器公钥改变时拒绝连接
yes:不会自动添加服务器公钥到~/.ssh/known_hosts中,同时如果远程服务器公钥改变时拒绝连接
no:自动增加新的主机键到~/.ssh/known_hosts中
参考:
Visual Studio Code Remote SSH Tips and Tricks
多台WIN10之间的SSH免密登录 - 知乎