ssh 隧道中断以解锁密钥 - 寻找单个命令

ssh 隧道中断以解锁密钥 - 寻找单个命令

我正在尝试创建一个 ssh 隧道来访问只能通过另一台服务器 (B) 访问的远程服务器 (A)。我在本地计算机 (L) 上有一个密钥,用于访问中继服务器 (B),在中继服务器 (B) 上还有一个密钥,用于访问目标服务器 (A)。

[本地机器(L)带着密钥发送到中继服务器(B)] --> [中继服务器(B)带着密钥发送到目标服务器(A)] --> [目标服务器(A)]

我有一个 ~/.ssh/config 文件,在我的本地机器(L)上看起来像这样:

Host relay.server(B)
    Hostname relay.server
    Port 22
    User me
    IdentityFile ~/.ssh/id_rsa

Host destination.server(A)
    Hostname destination.server
    Port 1122
    User me
    IdentityFile ~/.ssh/id_rsa

我可以通过以下方式让隧道顺利运行:

在我的本地机器 (L) 上运行命令:ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)。这会提示我输入密码以解锁第一个密钥,然后似乎挂起了它,没有返回提示,使用选项-f或以结尾&阻止我输入密码。但是,如果我^C在输入密码后输入此命令,然后输入,ssh destination.server(A)我会得到一个提示,要求我提供密码以解锁第二个密钥,之后我连接到目标服务器 (A)。

我正在寻找一个命令,让我从本地计算机 (L) 连接到目标服务器 (A),并提示我提供解锁每个密钥所需的密码。或者建议一种替代的组织方式,以便我可以通过中继服务器 (B) 从本地计算机 (L) 直接连接到目标服务器 (A)。

答案1

简短的回答是你需要

  • ProxyCommand使用nc连接
  • ForwardAgent传递钥匙
  • 确保您的公钥属于.ssh/authorized_keys所有服务器的一部分
Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ProxyCommand    ssh -q relay "nc %h %p"
    ForwardAgent    yes

较长的部分。

ssh config 中的选项会在使用ProxyCommand该命令时运行命令。它通常与nmap.org 提供的一起使用,也称为 ,并且有很多选项。Hostncncat

在上面的Host destinationssh 配置条目中,ProxyCommand设置为ssh -q relay "nc %h %p",表示 ssh 静默中继并运行nc destination.server.fqdn.or.IP 22

nc建立传入 ssh 与目标之间的连接。

告诉ForwardAgent yesssh 将密钥添加到 ssh 代理。ssh 代理会跟踪密钥,并根据需要自动将正确的密钥传递给主机。 告诉ForwardAgent yes代理将密钥传递给中继上的另一个代理,然后再传递给目的地。

现在,为了让这一切正常运作,您经过的每个服务器以及最终目的地都必须在其文件中拥有与您的私钥 (id_rsa) 关联的公钥.ssh/authorized_keys。当您创建私钥 id_rsa 时,还应该创建一个公钥 id_rsa.pub。

如果您没有公钥,您可以随时通过私钥获取公钥,ssh-keygen -y -f ~/.ssh/id_rsa以便轻松复制/粘贴。请注意,公钥有 2 或 3 个空格分隔的字段,但线。

因此,ssh relay编辑~/.ssh/authorized_keys(可能不存在,因此mkdir -p ~/.ssh可能是必要的)并将公钥粘贴到新行(如果不存在,则粘贴到第一行)。

在中继服务器上,检查nc/bin 或 /usr/bin 中是否存在。如果不存在,则需要使用包管理器(yum 或 apt-get)进行安装。

从中继服务器,ssh destination对 进行同样的更新~/.ssh/authorized_keys

exit一直到你的本地机器,你应该能够ssh destination

答案2

较新的 OpenSSH 版本ProxyJump允许.ssh/config

Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    ProxyJump       relay
    User            me
    IdentityFile    ~/.ssh/id_rsa

相关内容