「Tools-VSCode」:Remote SSH-跳板机设置
VSCode就是最棒的IDE!
最近遇到一个Remote SSH的问题:想要连接校内的服务器,必须经过两个跳板机。
即需要三次ssh,才能连接到目标服务器D:A➡️B➡️C➡️D
- Terminal:如何无痛免密登录校内服务器 (需要输入三次ssh命令)
- VSCode:如何无痛用VSCode连接远程服务器以进行开发(一键式)
Terminal
如果只需要在terminal中免密连接远程服务器,步骤比较直观,但仍需要三次输入ssh命令:
- A、B、C主机通过
ssh-keygen
生成公私钥 - 公钥认证链:
- A的公钥内容加入B主机下的
~/.ssh/authorized_keys
中 - B的公钥内容加入C主机下的
~/.ssh/authorized_keys
中 - C的公钥内容加入D主机下的
~/.ssh/authorized_keys
中
- A的公钥内容加入B主机下的
- Done
VSCode
在vscode官方博客: Remote SSH: Tips and Tricks 有提到,配置文件的ProxyCommand
设置,可以让remote ssh通过一个跳板机再连接到受保护的目标主机。
To use a jump-box setup with the Remote - SSH extension, you can use the
ProxyCommand
config option.
通过一个跳板机
A➡️B➡️C:A是用户主机,B是跳板机,C是目标主机
把A的公钥内容加入到B主机下的
~/.ssh/authorized_keys
和C主机下的~/.ssh/authorized_keys
注意:这里和上面terminal的方式不同。上面是链式验证,这里是中心式的验证。(意会就好,乱取的名字)如果不加入,VSCode中每次跳转都要输密码。(懒zzz,并不想)
Q:为什么要把A的公钥加入到B主机和C主机的已认证密钥中?原因如下。
This configuration will open a background SSH connection to the jump box, and then connect via a private IP address to the target.
A主机下生成两个文件:
b_private
和c_private
A主机:
~/.ssh/b_private
: B跳板机的私钥内容。(注意是私钥)~/.ssh/c_private
: C跳板机的私钥内容。
编辑VSCode ssh的配置文件
~/.ssh/config
1
2
3
4
5
6
7
8
9
10
11
12
13# B is Jump Box with public IP address
Host B
HostName <IP address of B>
User fred
IdentityFile ~/.ssh/b_private
# C is Target Machine with private IP address
Host C
HostName <IP address of C>
User fred
Port 6000
IdentityFile ~/.ssh/c_private
ProxyCommand ssh -q -W %h:%p BIdentityFile: 私钥文件的路径
Done:在VSCode中一键连接远程服务器C。
通过多个跳板机
由此可以实现多次跳转。
比如经过两次跳转A➡️B➡️C➡️D:A是用户主机,B、C是跳板机,D是目标主机。
把A的公钥内容加入到B、C、D主机下的
~/.ssh/authorized_keys
A主机下生成两个文件:
b_private
、c_private
和d_private
A主机:
~/.ssh/b_private
: B跳板机的私钥内容。(注意是私钥)~/.ssh/c_private
: C跳板机的私钥内容。~/.ssh/d_private
: D跳板机的私钥内容。
编辑VSCode ssh的配置文件
~/.ssh/config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# B is Jump Box with public IP address
Host B
HostName <IP address of B>
User fred
IdentityFile ~/.ssh/b_private
# C is Jump Box with private IP address
Host C
HostName <IP address of C>
User fred
Port 6000
IdentityFile ~/.ssh/c_private
ProxyCommand ssh -q -W %h:%p B
# D is Target Machine with private IP address
Host D
HostName <IP address of D>
User abc
IdentityFile ~/.ssh/d_private
ProxyCommand ssh -q -W %h:%p CDone:在VSCode中一键连接远程服务器D。
「Tools-VSCode」:Remote SSH-跳板机设置