我有一个跳转服务器和一个目标服务器,我想连接到这个
myPc > JumpServer > TargetServer
在第一步中,我可以使用 ssh-keygen 跳过密码验证,但是在第二步中,由于安全问题,ssh-keygen 未安装,我对此无能为力。所以我想在我的 PC 上用一个命令传递密码。到目前为止,我尝试过:
sshpass -p myPassword ssh -At username@JumpServer ssh -A username@targetServer
ssh -J username@JumpServer username@targetServer
但都不起作用,有什么建议吗?
首先决定您是要菊花链式
ssh
连接还是“嵌套管”为ssh -J
您提供的连接。阅读我的这个答案,了解我的意思。您尝试了两者,但不清楚您想要哪一个。一般来说,后者ssh -J
更好(例如,端口转发或分配 tty 比菊花链式连接更简单)。如果您愿意
ssh -J
(我推荐这样做),那么只有本地可用的密钥ssh
才是重要的。在跳转主机上不会调用任何 SSH 客户端。存储在跳转主机上的私钥(如果有)将无关紧要,因此您无法ssh-keygen
在那里运行来创建它们这一事实并不重要;它们无论如何都没有用。您的本地身份可用于在跳转主机和目标服务器上对您进行身份验证。我假设您已经在ssh-keygen
本地运行。首先通过在本地运行以下命令在跳转主机上注册您的密钥:然后使用跳转主机连接到目标服务器并在那里注册你的密钥。在本地运行此命令:
注意
ssh -J …
是指定的快捷方式ssh -o ProxyJump=…
,但由于ssh-copy-id
不支持-J
,我们不得不在这里使用其他语法。现在,如果两台服务器都配置为允许基于密钥的身份验证,那么您将能够
ssh -J username@JumpServer username@targetServer
从本地机器进行操作。如果您想要菊花链式
ssh
连接,那么在跳转主机上放置一个私钥并在ssh
登录到目标服务器时使用它进行身份验证是合理的。我知道您无法ssh-keygen
在跳转主机上运行。您仍然可以在本地创建密钥,在目标服务器上注册它,然后将密钥对移动(或复制)到跳转主机,这样文件就会在那里,就像您在那里使用创建它们一样ssh-keygen
。一般来说,每个 SSH 服务器可能都配置为禁止某些事情,这可能会限制您的选项或强制执行某些操作。例如,如果您已设法让跳转主机接受您的密钥,但目标服务器无论如何都要求输入密码,那么这个本地命令将非常方便:
(这个想法已经在评论中发表过了。)
笔记:
sshpass -f…
应该优先于sshpass -p…
。sshpass
预期的提示是什么(示例)。