【一文搞定】vscode--ssh remote多级跳转,连接到目标主机,免密登录、默认选平台

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窗口,左下角“>

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 noPasswordAuthentication 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免密登录 - 知乎

你可能感兴趣的:(vscode,ssh,remote,免密)