如何使用另一台服务器ssh到服务器?

Omi*_*mid 40 ssh

可能重复:
通过多个主机 ssh

对于连接到服务器B我得先ssh来服务器A。访问服务器 B的命令行是什么?

Ale*_*ios 61

如果服务器 B 可通过访问访问ssh并且您只需要ssh(不是直接scpsftp),这也很有效:

ssh -t $SERVER_A ssh $SERVER_B
Run Code Online (Sandbox Code Playgroud)

-t即使在另一端运行单个命令时,该选项也会强制分配伪 tty。这很有帮助,因为ssh需要一个伪 tty。

由于您使用的是 的两个嵌套实例ssh,因此内部会话中的转义字符是Enter ~ ~(两个波浪号)。一个波浪号会将转义发送到第一个 shell。

  • 额外提示:您可以添加 -A 参数来传递您的身份密钥。例如:`ssh -A -t $SERVER_A ssh -A $SERVER_B`,一个很好的解决方案 oh-I-can't-access-this-server-directly-but-hey-I-can-reach- it-via-that-server-with-key-auth (4认同)
  • @Zyphrax ssh -A -t <server1> ssh -A <server2> 不适用于为我转发私钥。它说 - “权限被拒绝(公钥)”。我有什么地方说错了吗? (2认同)

Dan*_*man 19

ssh除了使用端口转发之外,没有内置的方法可以做到这一点。

但是,有一种方法相当有效ProxyCommand——ssh的设置。您可以在每个主机的基础上~/.ssh/config指定它并使用它来指定要运行以连接到远程 ssh 端口的命令。

我在几个主机上使用它:

host serverB.example.com serverB
  ProxyCommand /usr/bin/ssh serverA.example.com /usr/bin/nc %h %p
Run Code Online (Sandbox Code Playgroud)

有关ssh(1)详细信息,请参阅手册页,以及我用于转发连接的命令nc(1)netcat包。(不过,您可以使用任何建立 TCP 连接并通过它传递标准输入和输出的东西。)

  • 只是为了记录较新版本的 ssh 支持 `-W` 选项,您可以执行类似 `ProxyCommand ssh -W %h:%p gateway` 的操作,而不是依赖于 `nc` (14认同)