如何配置 SSH 以使用一个 SSH 密钥通过代理连接到主机

如何配置 SSH 以使用一个 SSH 密钥通过代理连接到主机

我有一个这样的网络拓扑:

Laptop -> Bastion -> Destination

Bastion 和 Destination 是使用相同 SSH 密钥进行 SSH 访问的 EC2 实例。但是,Destination 无法从 Internet 访问。其 IP 地址仅对 Bastion 可见。

我可以连接到 Bastion 并使用代理转发传递 SSH 密钥,然后从 Bastion 单独连接到目标服务器。但是,我想以.ssh/config这样的方式配置我的文件,即我可以使用笔记本电脑上的一个命令通过 SSH 连接到目标服务器。我当前的.ssh/config文件如下所示:

Host Bastion
  Hostname <redacted>
  IdentityFile ~/.ssh/mykey.pem

Host Destination
  Hostname <redacted>
  User ubuntu
  ProxyCommand ssh -A bastion-dev -W %h:%p

但当我跑步时

ssh -A ubuntu@Destination

SSH 响应:

Permission denied (publickey).
ssh_exchange_identification: Connection closed by remote host

如何正确地将 SSH 密钥从本地传递到 Bastion 服务器,而无需将其存储在服务器上?我可以通过.ssh/config文件配置所有这些,以便使用单个命令登录目标服务器吗?

答案1

使用客户端的一个或多个ssh -v标志进行调试,并检查相关服务器上的日志以查看问题出在哪里。

我经常为不同的客户、站点和项目设置不同的密钥,MaxAuthTries当 ssh-agent 仍在尝试每个潜在密钥但尚未找到正确密钥时,我遇到了远程 ssh 服务器的设置。请查看服务器日志以查找此信息。

此外,我的工作站上的用户名通常与 Bastion 或 Destination 上分配的用户名不匹配,因此我更喜欢在配置中明确设置所有设置。这样我就不需要使用任何命令行标志,只需键入即可ssh Destination完成。

Host Bastion
    Hostname bastion.example.com
    User hbruijn-adm
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X 
    IdentityFile ~/.ssh/id_rsa.bastion

Host Destination
    Hostname destination.example.com
    User ubuntu 
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X
    IdentityFile ~/.ssh/id_rsa.destination
    ProxyJump Bastion

ProxyJump是一个相对较新的设置,我发现它比 更直观ProxyCommand

相关内容