ssh proxycommand -W,nc,exec nc之间的区别是什么?

时间:2014-03-25 13:07:49

标签: ssh

我见过一些关于.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

其中一些命令适用于某些机器,而不适用于其他机器。

1 个答案:

答案 0 :(得分:26)

以下是我的理解:


  1. 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来通过中间服务器路由连接。

  2. 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(默认值:是)。选项-q0nc是(应该是)用于平息错误,但我无法找到引入的版本。 (注意:2> /dev/null可能会出现ssh个错误,但可以使用ssh -q代替。{/ li>
  3. 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.