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 配置中使用,除了替换ProxyCommand
as
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
:
- 可以通过同一个隧道建立多个会话。
- 您只需对每个连接进行一次验证,而不是两次。
- 透明地使用
ssh
、scp
和sftp
(例如,您scp thisfile server2:~/thatfile
无需做任何额外的工作)。 - X 和端口转发工作无需思考。