仅在代理中使用身份文件的 SSH 代理跳转

Adr*_*ffo 7 linux ssh proxy openssh public-key

我在其他线程中找不到我的具体案例。

基本上我有我的 PC (ubuntu)、一个代理 (Debian) 和一个目标 (Debian)。我想通过代理从 PC 到目标进行代理跳转。从代理到目标以及从 PC 到代理的身份验证使用公钥身份验证,每台机器都有自己的密钥对。

PC中的privkey与proxy中的PC pubkey相匹配,它们在默认目录中。所以,我只是运行ssh user@proxy inPC,它可以很好地连接到代理。在代理中,我必须指定ssh -i mypubkey user@targetserver连接正常(它不是默认密钥)。

现在,在 PC 上,我不知道如何运行一个命令并最终进入目标,因为我必须在代理中指定私钥。我试过:

ssh -J user@proxy user@target
ssh -Ao ProxyCommand="ssh -W %h:%p user@proxy" user@target
Run Code Online (Sandbox Code Playgroud)

但它给了我错误权限被拒绝(公钥)。

在代理服务器我试图添加IdentityFile指令中~/.ssh/config/etc/ssh/ssh_config,但显然当我打电话从PC作为主机跳代理,它不需额外花费从这些文件中的配置。

如果我将私钥从代理带到 PC 并指定-i例如,它可以工作(那将是ssh -i mypubkey -J user@proxy user@target)。所以我的问题是:是否可以将私钥保留在代理中并在 PC 中引用它,这样我就不必将其移动到 PC 上?

cri*_*ret 7

[...] 是否可以将私钥保留在代理中并在 PC 中引用它,这样我就不必将其移动到 PC 上?

简短回答:否

原因:本地 PC 上的所有配置文件(或命令行)引用都指向驻留在本地设备 (PC) 上的文件。您无法从您的 PC 中引用尝试建立连接ssh可以访问的远程(代理)文件ssh

此外:您可能不想在代理上存储用于代理到目标访问的私钥;如果你这样做了,它必须是一个没有密码短语的密钥,这总是不好的安全做法。一般来说,最好妥善保护您的私钥。就我而言,它们只存在于我的本地机器上,并且总是有很好的密码。

建议的解决方法:您已经在本地 PC 上设置了使用代理到目标密钥的设置。要么继续,要么使用 ssh-agent 和转发来提供无密码访问,我想你想保留。示例~/.ssh/config条目:

Host target
    ProxyJump  user@proxy
    IdentityFile .../target-id_rsa

Host proxy
    IdentityFile .../proxy-id_rsa
    ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)

IdentityFile如果您知道您已经将密钥加载到您的本地代理中,您可能可以在没有指令的情况下离开。