2011-12-30 114 views
2

我在Windows XP上使用cygrunsrv和autossh創建一個服務,建立到遠程服務器的隧道,但我也想從遠程服務器創建另一個隧道到另一個服務器。Cygrunsrv&autossh:一種在命令行中嵌入遠程命令的方法?

我可以使用此命令行實現它:

autossh -M 5432 serverA -t 'autossh -M 4321 serverB -N' 

但是當我想通過cygrunsrv設置它在Cygwin中,使其可以作爲一個服務:

cygrunsrv -I TUNNEL -p /usr/bin/autossh -a "-M 5432 serverA -t 'autossh -M 4321 serverB -N'" -e AUTOSSH_NTSERVICE=yes -e AUTOSSH_POLL=20 -e AUTOSSH_GATETIME=30 

這不完全加工。該服務正在爲ServerA正確創建隧道,但它不會將autossh命令「autossh -M 4321 serverB-N」發送到ServerA。 我試圖逃避報價,但我所有的努力沒有任何區別,我沒有看到在autossh日誌中發送任何命令。

我認爲這個問題與不通過cygrunsrv創建的僞終端有關。

我想知道是否有辦法修復我的cygrunsrv命令行以使其工作,或者我應該考慮一種不同的方法?

回答

3

Lionel,請嘗試從cygrunsrv調用中刪除AUTOSSH_NTSERVICE=yes。作爲/usr/share/doc/autossh/README.Cygwin解釋說:

設置AUTOSSH_NTSERVICE =是在調用環境...... 變化[S] autossh在三個有用的 方面的行爲:

( 1)爲每次調用ssh添加一個-N標記,從而禁用shell的訪問。這個想法是,如果你運行autossh作爲系統 服務,你正在使用它來轉發端口; 將shell會話作爲系統服務運行是沒有意義的。 (如果你覺得這個推理 是錯誤的,請發送錯誤報告的作者或Cygwin的維護者, 並告訴我們你想要做的事。)

儘管上面有哪些說,似乎你可能有一個很好的理由不希望在服務的ssh調用中使用-N(這會抑制命令的執行)。去除AUTOSSH_NTSERVICE=yes應該照顧它。它會有一些其他的小缺點,但你可以忍受它。有關詳細信息,請閱讀README.Cygwin的其餘部分。

+0

非常感謝安德魯,我刪除了AUTOSSH_NTSERVICE =是在我的命令行,它worked.I相信這是一個必要的選擇,因爲它加載的服務,我明顯錯過了-N標誌注意到在自述,殘疾shell訪問,阻止我的第二個autossh調用被髮送。 – Lionel 2012-01-04 16:56:27

+0

再次感謝您的時間和記錄答案。祝你有美好的一天 ! – Lionel 2012-01-04 17:04:42