【问题标题】:VS Code jump-box setup with SSH keys带有 SSH 密钥的 VS Code 跳转框设置
【发布时间】:2020-05-14 13:01:35
【问题描述】:

通过跳转框建立 SSH 连接

大家好,我一直在尝试在 VS Code 上设置我的环境,以便通过我的 Windows 笔记本电脑在远程 Linux 服务器上运行我的代码(通过我大学部门的代理),方法是关注 this tutorial。它工作正常,但每次我连接到主机时,我都需要输入我的密码,并希望通过配置我的 SSH 密钥来避免这种情况 - 似乎我还没有找到正确的方法。

生成密钥

让我们调用我的本地 Windows 机器 local、代理 host1 和最终端点 host2。我在local 上创建了一个私钥/公钥对,将公钥传输到host1,使其现在位于~/.ssh/authorized_keys,并通过在host1 上生成一个新的密钥对并传输公钥来重复该过程在host2。我按照here 的说明生成和传输密钥:

  1. local 上生成密钥: ssh-keygen -t rsa -b 4096

  2. 将公钥转移到host1

$USER_AT_HOST="your-user-name-on-host@hostname"
$PUBKEYPATH="$HOME\.ssh\id_rsa.pub"

$pubKey=(Get-Content "$PUBKEYPATH" | Out-String); ssh "$USER_AT_HOST" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '${pubKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
  1. host1 上生成密钥: ssh-keygen -t rsa -b 4096

  2. 将公钥转移到host2

export USER_AT_HOST="your-user-name-on-host@hostname"
export PUBKEYPATH="$HOME/.ssh/id_rsa.pub"

ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST"

VS 代码配置

然后我根据this编辑了我的config文件,现在看起来如下:

Host host1
  HostName host1
  User me
  ForwardX11 yes
  IdentityFile C:\Users\Me\.ssh\id_rsa

Host host2
  HostName host2
  ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -W %h:%p host1
  ForwardX11Trusted yes
  User me
  IdentityFile ~/.ssh/id_rsa

似乎第一次跳转工作正常(我不需要输入两次密码)但在建立连接时仍然要求我输入它。我的猜测是我没有正确配置IdentityFile?当通过 PowerShell 分两步连接时(即 SSH 到 host1 然后 host2),我不需要输入我的密码。我真的很感激任何建议!

【问题讨论】:

  • ssh 服务器必须配置为允许公钥身份验证。我不知道为什么他们不会,但你至少应该验证他们是。
  • 感谢@PresidentJamesK.Polk!我认为它被配置为允许公钥认证;我可以使用 PowerShell 先通过 SSH 连接到 host1,然后再连接到 host2,而不会提示我输入密码。我认为我的配置文件一定是错误的..?

标签: ssh visual-studio-code proxy public-key


【解决方案1】:

我一直陷入同样的​​情况。我尝试了很多,终于设法在没有密码提示的情况下连接。下面是我的做法,希望对你有帮助。

假设我(机器A)想通过机器B(JumpServer)连接机器C,在机器A上使用ssh-keygen生成密钥,然后将公钥文件(默认为id_rsa.pub)的内容复制到授权密钥机器 B 和机器 C 的文件(默认为 .ssh 文件夹中的授权密钥)(或使用 ssh-copy-id 如果可用)。最后,配置文件中机器 B 和机器 C 的两个主机的 IdentityFile 字段(在您的情况下为 host1 和 host2),用 ~/.ssh/id_rsa 或 C:\Users\your_user_name.ssh\id_rsa 填充它们(私有您在机器 A 上生成的密钥)。

终于按预期连接了。(我猜在这种情况下但不确定本地机器A中的身份文件始终是连接的主体,因此机器B和机器C需要使用机器A的身份所有授权)

【讨论】:

    【解决方案2】:

    我遇到了完全相同的情况,就是建立这个 ssh 连接:本地 (Windows) -> host1 (Linux) -> host2 (Linux)

    这里的问题是,对于第二次跳转到 host2,ProxyCommand "ssh.exe -q -W %h:%p host1" 实际上是在本地查找 host2 的 IdentityFile "~/.ssh/id_rsa"。因为你在host1上生成的key与在local上生成的key不同,所以在local上使用key会导致第二次跳转失败。

    解决方案:

    1. 只需使用相同的键进行两次跳跃。将本地的 id_rsa.pub 复制到 host2 的 authorized_keys。
    2. 将host1上的密钥文件复制到本地,重命名,并在host2的IdentityFile中填写本地密钥文件的路径。
    3. 参考this question,修改ProxyCommand可以让ssh在第二次跳转时使用host1上的key。但是,我无法让它在我的 Windows 本地机器上运行。

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 2020-03-01
      • 1970-01-01
      • 2019-09-04
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      相关资源
      最近更新 更多