我正在尝试通过桥接服务器隧道到服务器。到目前为止,我已经能够使用以下命令在命令 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