我见过一些关于.ssh / config和proxycommand
现在下一个命令之间有什么区别
ProxyCommand ssh proxyserver -W [%h]:%p
ProxyCommand ssh proxyserver nc -q0 %h %p 2> /dev/null
ProxyCommand ssh proxyserver exec nc -q0 %h %p 2> /dev/null
其中一些命令适用于某些机器,而不适用于其他机器。
答案 0 :(得分:26)
以下是我的理解:
ProxyCommand ssh proxyserver -W [%h]:%p
-W
选项内置于OpenSSH的新(呃)版本中,因此这只适用于具有最低版本的机器(5.4,除非您的发行版支持后端移植任何功能;例如, RHEL6 OpenSSH 5.3p1包含此功能)。根据发行说明:http://www.openssh.com/txt/release-5.4
添加了一个' netcat模式'到ssh(1):" ssh -W host:port ..."这会将客户端上的stdio连接到服务器上的单个端口。例如,这允许使用ssh作为ProxyCommand来通过中间服务器路由连接。
ProxyCommand ssh proxyserver nc -q0 %h %p 2> /dev/null
-W
选项可用之前,我们使用了nc
(或netcat)实用程序。 nc
允许您转发TCP& UDP数据包到指定(备用)位置,并且基本上与ssh -W
的行为相同(因为ssh -W
已建模nc
)。为了使这种变化起作用,中间主机需要安装nc
,并且必须在主机的sshd_config中启用选项AllowTcpForwarding
(默认值:是)。选项-q0
到nc
是(应该是)用于平息错误,但我无法找到引入的版本。 (注意:2> /dev/null
可能会出现ssh
个错误,但可以使用ssh -q
代替。{/ li>
ProxyCommand ssh proxyserver exec nc -q0 %h %p 2> /dev/null
除了您调用shell的内置函数exec
之外,这与第二个版本非常相似。我不确定,但我认为在exec
中加入ProxyCommand
之间没有区别;这种变化应该在上述变化的任何地方起作用。例如,Bash手册说的是这样的:
exec [-cl] [-a name] [command [arguments]]
如果指定了command,它将替换shell。没有创建新进程。争论 成为命令的论据。如果提供了-l选项,则shell会在其中放置一个破折号 传递给命令的第0个参数的开头。这是login(1)的作用。 -c 选项导致命令在空环境中执行。如果提供-a,则为shell 将name作为执行命令的第0个参数传递。如果无法执行命令 某些原因,除非启用了shell选项execfail,否则将退出非交互式shell 它返回失败的情况。如果文件不能,则交互式shell将返回失败 执行。如果未指定command,则任何重定向都会在当前shell中生效,并且 返回状态为0.如果存在重定向错误,则返回状态为1.