2014-03-25 36 views
5

我看到約的.ssh/config中的幾個博客和proxycommand是什麼NC

SSH proxycommand -W,NC,高管之間的差別現在是什麼下一個命令之間的差異

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

」 ..不要在別人身上工作「是相當空洞的... – twalberg

回答

10

我是這樣理解的:


  1. ProxyCommand ssh proxyserver -W [%h]:%p

    • -W選項內置的OpenSSH的新(ER)的版本,所以這隻能在機器的工作,有最低版本(5.4,除非您的發行版支持任何功能;例如,RHEL6 OpenSSH 5.3p1包含此功能)。每發行說明:http://www.openssh.com/txt/release-5.4

      增加了一個「netcat的模式」到SSH(1):「SSH -W主持人:端口...」,這樣在客戶機上轉發服務器連接標準輸入輸出到一個端口。例如,這允許使用ssh作爲ProxyCommand來通過中間服務器路由連接。

  2. ProxyCommand ssh proxyserver nc -q0 %h %p 2> /dev/null

    • -W選項可用之前,我們使用了nc(或netcat的)工具。 nc允許您將UDP數據包轉發到指定的(備用)位置,其行爲與ssh -W相同(因爲ssh -W建模在nc之後)。爲了使這種變化起作用,中間主機需要安裝nc,並且必須在主機的sshd_config中啓用選項AllowTcpForwarding(默認爲yes)。選項-q0nc是(應該是)爲了靜默錯誤,但是我找不到它引入了哪個版本。 (注:2> /dev/null可能是相當ssh錯誤,但可以使用ssh -q代替。)
  3. ProxyCommand ssh proxyserver exec nc -q0 %h %p 2> /dev/null

    • 這是大同小異的第二變化,除非你打電話外殼的內置功能exec。我不確定,但我相信在包含或排除execProxyCommand之間沒有區別;這種變化應該在上述變化的任何地方起作用。例如,猛砸手冊上說是這樣的:

      EXEC [-cl] [-a名] [命令[參數]]

      如果指定了命令,它取代了殼。沒有新的過程被創建。參數 成爲命令的參數。如果提供了-l選項,那麼shell會在傳遞給命令的第0個參數的起始位置 處放置一個破折號。這是登錄(1)所做的。 -c 選項會導致命令在空白環境下執行。如果提供了-a,則shell 將name作爲執行命令的第0個參數。如果由於某種原因無法爲 執行命令,則非交互式shell將退出,除非啓用了shell選項execfail,則在 這種情況下它將返回失敗。如果文件不能被執行,則交互式shell將返回失敗。如果沒有指定命令,任何重定向採取在當前shell效果, 返回狀態是0。如果有一個重定向錯誤,返回狀態是1

+0

我已經錯過了你的評論一段時間,並感謝您的完美。但是在2.和3.之間是有區別的,因爲它們不能同時在一些機器上工作(一個工作而另一個不工作)。預計-W和nc之間的區別,但我不知道爲什麼我看到「exec nc」和「nc」之間的區別。 – zidarsk8

+2

'exec'結束shell並用'nc'進程替換它,而不是在子進程中運行'nc'。這是一個很好的做法,因爲在那個時候不需要shell,並且進程樹更加整潔,鏈中沒有不必要的shell,但它不應該影響服務器跳轉是否工作。在某些情況下,例如在主管中運行服務時,信令正常工作至關重要,但這不是一個因素。 – clacke