正确的ssh配置文件设置以隧道传输到第三台计算机


20

我正在尝试通过桥接服务器隧道连接到服务器。到目前为止,我已经可以使用以下命令从命令外壳正常运行它:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

但是我一直试图将其包装到我的~/.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外壳是/usr/bin/ksh

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

有什么想法吗?


那不是应该ProxyCommand被使用的方式。通常,它与netcat一起使用,其中ssh通过它传递输出,而netcat充当通往远程服务器 SSH端口的隧道。ssh -W %h:%p bridge_userid@bridgemachine.com如果要使用该功能,则需要类似的ProxyCommand 。
DanSut 2015年

不幸的是,我的网桥服务器上没有安装netcat,因此我正在尝试使其以其他方式工作。我认为如果可以从命令行运行,应该有一种方法可以将信息放入配置文件中。
埃里克·B

在您可以ssh -A remote_userid@remoteserver.com作为在桥机上运行的命令的方式使用的命令行用法中,config不能提供默认命令的方式。您尝试自己做的事works,但随后ssh尝试将您ProxyCommand的隧道用作隧道并开始向其发射SSH协议,而在另一端有外壳等待而不是sshd侦听SSH协议。
DanSut 2015年

@dansut很棒。谢谢!
埃里克·B。

Answers:


25

Jakuje的答案是正确的,但是自从OpenSSH以来7.3,您现在-J ProxyJump可以更轻松地使用它了。看我的笔记:

OpenSSH 7.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

OpenSSH 5.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

资料来源

-JOpenSSH 7.3中添加

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

-WOpenSSH 5.4中添加

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

3

您不需要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

有效。谢谢。不知道为什么,但是确定我曾经尝试过一次失败,但是再次尝试成功了。谢谢。
埃里克·B。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.