OpenSSH7.3或以上版本

OpenSSH7.3或以上版本

我正在尝试通过桥接服务器隧道到服务器。到目前为止,我已经能够使用以下命令在命令 shell 中正常工作:

ssh -A -t [email protected] ssh -A [email protected]

但我一直试图将其打包到我的~/.ssh/config文件中,但遇到了麻烦。我试过了:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

但是当我这样做时,我收到以下错误消息remoteserver.com,并且我不确定是什么原因导致的:

ksh:SSH-2.0-OpenSSH_6.8^M:未找到

我知道当我登录时remoteserver.com,我的 shell 是/usr/bin/ksh.

我尝试将路径参数添加到配置文件中的 ssh 命令,但这没有什么区别。

有什么想法吗?

答案1

贾库杰的回答是对的,但是自从 OpenSSH 以来7.3,您现在可以使用-J ProxyJump更简单的方法。看我的笔记:

OpenSSH7.3或以上版本

使用ProxyJump。正如手册中所解释的:

-J [user@]host[:port]
通过首先与跳转主机建立 ssh 连接,然后建立从那里到最终目的地的 TCP 转发来连接到目标主机。可以指定多个跳转,并用逗号分隔。这是指定 ProxyJump 配置指令的快捷方式。

ProxyJump~/.ssh/config示例

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

与连接

ssh server2_behind_server1 -v

添加-v详细输出

ProxyJump-J命令行示例

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

与连接

ssh server2 -J server1 -v

或者使用-o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH5.4或以上版本

ProxyCommand与使用-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

与连接

ssh server2 -v

或者使用-o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSH 如下5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

与连接:

ssh server2 -v

或者使用-o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

来源

-J添加到OpenSSH 7.3

  • ssh(1):添加 ProxyJump 选项和相应的 -J 命令行标志,以允许通过一个或多个 SSH 堡垒或“跳转主机”进行简化的间接访问。

-W添加到OpenSSH 5.4

  • 向 ssh(1) 添加了“netcat 模式”:“ssh -W host:port ...” 这将客户端上的 stdio 连接到服务器上的单个端口转发。例如,这允许使用 ssh 作为 ProxyCommand 通过中间服务器路由连接。 bz#1618

答案2

你不需要netcat在你的桥上。正如 DanSut 在评论中建议的那样,您可以使用ssh -W命令行选项,此配置应该适合您:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

相关内容