「Tools-VSCode」:Remote SSH-跳板机设置

VSCode就是最棒的IDE!

最近遇到一个Remote SSH的问题:想要连接校内的服务器,必须经过两个跳板机。

即需要三次ssh,才能连接到目标服务器D:A➡️B➡️C➡️D

  • Terminal:如何无痛免密登录校内服务器 (需要输入三次ssh命令)
  • VSCode:如何无痛用VSCode连接远程服务器以进行开发(一键式)

Terminal

如果只需要在terminal中免密连接远程服务器,步骤比较直观,但仍需要三次输入ssh命令:

  1. A、B、C主机通过ssh-keygen 生成公私钥
  2. 公钥认证链:
    1. A的公钥内容加入B主机下的~/.ssh/authorized_keys
    2. B的公钥内容加入C主机下的~/.ssh/authorized_keys
    3. C的公钥内容加入D主机下的~/.ssh/authorized_keys
  3. 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是目标主机

  1. A的公钥内容加入到B主机下~/.ssh/authorized_keysC主机下~/.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.

  2. A主机下生成两个文件:b_privatec_private

    A主机:

    • ~/.ssh/b_private : B跳板机的私钥内容。(注意是私钥)
    • ~/.ssh/c_private : C跳板机的私钥内容
  3. 编辑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 B

    IdentityFile: 私钥文件的路径

  4. Done:在VSCode中一键连接远程服务器C。

通过多个跳板机

由此可以实现多次跳转。

比如经过两次跳转A➡️B➡️C➡️D:A是用户主机,B、C是跳板机,D是目标主机。

  1. A的公钥内容加入到B、C、D主机下~/.ssh/authorized_keys

  2. A主机下生成两个文件:b_privatec_privated_private

    A主机:

    • ~/.ssh/b_private : B跳板机的私钥内容。(注意是私钥)
    • ~/.ssh/c_private : C跳板机的私钥内容
    • ~/.ssh/d_private : D跳板机的私钥内容
  3. 编辑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 C
  4. Done:在VSCode中一键连接远程服务器D。

「Tools-VSCode」:Remote SSH-跳板机设置

https://f7ed.com/2021/10/19/vscode-remote-ssh/

Author

f7ed

Posted on

2021-10-19

Updated on

2021-10-20

Licensed under

CC BY-NC-SA 4.0


Comments