通过第三台机器进行 SSH

通过第三台机器进行 SSH
Local Computer (Fedora)  --SSH-->  Server1  --SSH-->  Server2

在我工作的某些环境中,我们必须使用“跳转箱”,通过 ssh 连接到一台服务器才能访问另一台服务器。有没有一种快速的方法可以做到这一点,也许可以通过编辑 ~/.ssh/config,这样每当我从本地计算机 ssh 到 Server2 时,它都会自动创建与 Server1 的必要连接?我可以设置密钥,这样在必要时就不会提示我输入 Server1 的密码。

答案1

此类功能已添加到 OpenSSH 版本 5.4 中,可通过以下方式使用

ssh -W server2 server1

server2您的预期目的地在哪里server1,您的代理主机在哪里。您可以使用 ssh 配置中的选项来简化此ProxyCommand操作,例如:

host = *.example.com
user = packs
port = 22
ProxyCommand ssh -W %h:%p server1

我也见过使用 netcat 完成的,因此使用与上面相同的示例

ssh server1 nc -q0 server2 22

类似地,这也可以在你的 ssh 配置中使用,除了替换ProxyCommandas

ProxyCommand ssh server1 nc -q0 %h %p

答案2

您可以使用如下命令:

$ ssh -t user@server1 ssh user@server2

此命令将您通过 server1 ssh 连接到 server2。系统将提示您连续输入两个密码以登录 server1,然后登录 server2。如果您设置了所需的 SSH 密钥,您将自动登录到 server2。

当您无法直接登录到server2时,这非常有用。

答案3

我使用转发端口:

# ~/.ssh/config

# The jumping-off point

Host server1
  Hostname blah.sample.com
  LocalForward 10002 server2:22
  LocalForward 10003 server3:22

# Servers behind the jumping-off point, reached by connecting
# to the forwarded ports above

Host server2
  HostKeyAlias server2
  Hostname localhost
  Port 10002

Host server3
  HostKeyAlias server3
  Hostname localhost
  Port 10003

这具有以下几个优点ssh -t user@server1 ssh user@server2

  • 可以通过同一个隧道建立多个会话。
  • 您只需对每个连接进行一次验证,而不是两次。
  • 透明地使用sshscpsftp(例如,您scp thisfile server2:~/thatfile无需做任何额外的工作)。
  • X 和端口转发工作无需思考。

相关内容