我有两台服务器,server1
并且server2
,我可以通过以下方式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 凭据,并且我不想将它们复制到我的本地计算机上。这意味着我通过将以下内容添加到我的 local 来设置它的“正常”方式~/.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's answer 中给出的解决方案,并将以下内容添加到我的~/.ssh/config
:
Host server1server2
Hostname server1
User user1
RemoteCommand ssh [email protected]
这几乎可以工作!我现在可以连接到server2
using ssh server1server2
,但没有收到提示:
localUser@localMachine $ ssh server1server2
Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname
server2
正如您在上面看到的,我已连接到server2
甚至可以在那里运行命令,但我没有得到提示。然后我尝试在配置文件中添加-t -t
命令ssh
:
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 不应该终止会话。
通过 SSH 配置在目标上执行命令至少有两种可能性:
command="command"
所以
或者
接着
ssh server1server2
@αғsнιη 在评论中将我指向https://serverfault.com/q/337274/155817,并基于此,我设法使用本地
~/.ssh/config
文件中的以下行使其工作:我现在可以直接连接:
上面的消息是由
ssh-add
将我的身份从 server1 添加到在 server2 上运行的身份验证代理引起的。然而,这不应该是一个问题。