我在其他帖子中找不到我的具体案例。
基本上,我有我的 PC(ubuntu)、代理(Debian)和目标(Debian)。我想通过代理从 PC 到目标进行代理跳转。从代理到目标以及从 PC 到代理的身份验证使用公钥身份验证,每台机器都有自己的密钥对。
PC 中的私钥与代理中的 PC 公钥匹配,它们位于默认目录中。因此,我只需运行ssh user@proxy in
PC,它就可以正常连接到代理。在代理中,我必须指定ssh -i mypubkey user@targetserver
才能正常连接(它不是默认密钥)。
现在,从 PC 上,我不知道如何运行一个命令并最终到达目标,因为我必须在代理中指定私钥。我试过:
ssh -J user@proxy user@target
ssh -Ao ProxyCommand="ssh -W %h:%p user@proxy" user@target
但是它给了我错误“权限被拒绝(公钥)”。
在代理服务器中,我尝试添加 IdentityFile 指令,~/.ssh/config
但/etc/ssh/ssh_config
显然当我从 PC 作为跳转主机调用代理时,它不会从这些文件中获取配置。
如果我将私钥从代理带到 PC 并指定-i
例如,它就可以工作(即ssh -i mypubkey -J user@proxy user@target
)。所以我的问题是:是否可以将私钥保留在代理中并在 PC 中引用它,这样我就不必将其移动到 PC 上?
答案1
[...] 是否可以将私钥保存在代理中并在 PC 中引用它,这样我就不必将其移动到 PC 了?
简短回答:否
原因:本地 PC 上的所有配置文件(或命令行)引用均指向本地设备(PC)上的文件。您无法从ssh
可以访问的 PC 引用远程(代理)文件当时ssh
正在尝试建立连接。
此外:你可能不想存储私钥代理到目标在代理上访问;如果这样做,则必须使用没有密码的密钥,这始终是一种不良的安全做法。通常,最好妥善保护您的私钥。就我而言,它们只存在于我的本地机器上,并且始终具有良好的密码。
建议的解决方法:您已经完成了设置,并使用代理到目标本地 PC 上的密钥。要么继续,要么使用 ssh-agent 和转发来提供无密码访问,我猜你想保留它。示例~/.ssh/config
条目:
Host target
ProxyJump user@proxy
IdentityFile .../target-id_rsa
Host proxy
IdentityFile .../proxy-id_rsa
ForwardAgent yes
IdentityFile
如果您知道您已经将密钥加载到您当地的代理中,那么您可能不需要执行任何指令。