使用 server1 上的凭据通过 server1 ssh 到 server2

使用 server1 上的凭据通过 server1 ssh 到 server2

我有两台服务器server1server2,我可以server2通过以下方式连接到server1

localUser@localMachine $ ssh user1@server1
user1@server1 $ ssh user2@server2
user2@server2 $

我可以使用以下方法一步完成此操作:

localUser@localMachine $ ssh -t user1@server1 ssh user2@server2
user2@server2 $

我希望能够简单地ssh server2从本地计算机运行并直接连接。我可以将上面的命令设置为别名,但我更喜欢通过~/.ssh/config.问题是,在连接到 server2 时,我需要使用 server1 上存在的 ssh 凭据,并且我不想将它们复制到本地计算机。这意味着我设置此功能的“正常”方式(通过将以下内容添加到本地~/.ssh/config)会失败:

Host server1
    Hostname  server1.example.com
    User      user1

Host server2
    Hostname  server2.example.com
    User      user2
    ProxyJump server1

如果我现在尝试连接,我会得到:

$ ssh server2
[email protected]: Permission denied (publickey).

这是因为我需要使用本地计算机~/.ssh/id_rsa_pub上的密钥server1,而不是本地计算机上的密钥。那么,我如何设置我的本地设备,~/.ssh/config以便它server2通过server1并使用 中存在的凭据连接到server1

所有机器都是 Linux 机器,远程机器运行 Ubuntu Server 18.04.4,我的本地机器运行 Arch Linux。


我尝试了 Hauke 的答案中给出的解决方案,并将以下内容添加到我的~/.ssh/config

Host server1server2
    Hostname server1
    User     user1
    RemoteCommand ssh [email protected]

几乎作品!我现在可以连接到server2using ssh server1server2,但没有收到提示:

localUser@localMachine $ ssh server1server2 
Pseudo-terminal will not be allocated because stdin is not a terminal.

hostname
server2

正如您在上面看到的,我已连接到那里server2,甚至可以在那里运行命令,但我没有收到提示。然后我尝试添加-t -tssh配置文件中的命令:

Host server1server2
    Hostname server1
    User     user1
    RemoteCommand ssh -t -t [email protected]

这给了我一个提示,但是我的 shell 的初始化文件没有被读取,并且按Ctrl+C会终止ssh连接。我需要它的行为方式与我ssh user2@server1从 server1所做的完全相同ssh user2@server2。这意味着应该读取我的正常 shell 初始化文件,并且 Ctrl+C 不应终止会话。

答案1

通过 SSH 配置在目标上执行命令至少有两种可能性:

  • 远程命令
  • 一个单独的公钥command="command"

所以

Host server1server2
    Hostname server1
    RemoteCommand ssh user2@server2

或者

Host server1server2
    Hostname server1
    IdentityFile ~/.ssh/id_ecdsa_force_command

进而ssh server1server2

答案2

@αГsнιη 给我指出了https://serverfault.com/q/337274/155817在评论中,基于此,我设法使用本地文件中的以下行使其正常工作~/.ssh/config

Host server2
    Hostname server2.example.com
    User user2
    ProxyCommand ssh -o 'ForwardAgent yes' server1  'ssh-add && nc %h %p'

我现在可以直接连接:

$ ssh server2
Identity added: /home/user1/.ssh/id_rsa (/home/user1/.ssh/id_rsa)

上面的消息是由于ssh-add将我的身份从 server1 添加到在 server2 上运行的身份验证代理而引起的。然而,这不应该是一个问题。

相关内容