答案1
如果可以通过以下方式访问服务器 Bssh
并且您只需要ssh
(而不是直接scp
或sftp
),这也非常有效:
ssh -t $SERVER_A ssh $SERVER_B
即使在另一端运行单个命令时,该-t
选项也会强制分配伪终端。这很有帮助,因为ssh
需要一个伪终端。
由于您使用的是 的两个嵌套实例ssh
,因此内部会话中的转义字符是Enter ~ ~(两个波浪号)。一个波形符会将转义发送到第一个 shell。
答案2
ssh
除了使用端口转发之外,没有内置的方法可以做到这一点。
然而,有一种方法相当有效——sshProxyCommand
设置。您可以在每个主机的基础上进行指定,~/.ssh/config
并使用它来指定要运行以连接到远程 ssh 端口的命令。
我在多个主机上使用它:
host serverB.example.com serverB
ProxyCommand /usr/bin/ssh serverA.example.com /usr/bin/nc %h %p
ssh(1)
有关详细信息,请参阅手册页,并nc(1)
从netcat
包中查看我用来转发连接的命令。 (不过,您可以使用任何建立 TCP 连接并通过它传递标准输入和输出的东西。)