我见过一些关于.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
其中一些命令适用于某些机器,而不适用于其他机器.
这是我理解的方式:
ProxyCommand ssh proxyserver -W [%h]:%p
该-W
选项内置于OpenSSH的新(呃)版本中,因此这仅适用于具有最低版本的机器(5.4,除非您的发行版后端移植任何功能;例如,RHEL6 OpenSSH 5.3p1包含此功能).根据发行说明:http://www.openssh.com/txt/release-5.4
为ssh(1)添加了'netcat模式':"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
安装,并且AllowTcpForwarding
必须在主机的sshd_config中启用该选项(默认值:yes).该选项-q0
来nc
进行(应该是)为平息的错误,但我不能找到这个被引入哪个版本.(注意:2> /dev/null
可能是相当ssh
错误,但可以使用ssh -q
.)
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会在传递给command的第0个参数的开头放置一个破折号.这是login(1)的作用.-c选项导致在空环境中执行命令.如果提供了-a,则shell将name作为第0个参数传递给执行的命令.如果由于某种原因无法执行命令,则会退出非交互式shell,除非启用了shell选项execfail,在这种情况下它将返回失败.如果无法执行文件,则交互式shell将返回失败.如果未指定command,则任何重定向在当前shell中生效,返回状态为0.如果存在重定向错误,则返回状态为1.