2011-05-08 72 views
20

當我試圖用ssh在遠程服務器上執行命令時,ssh命令在exec request accepted調試消息後掛起,並最終超時。SSH命令執行掛起,儘管交互式shell功能正常

失敗的命令:ssh -v -v <username>@<server> uptime(也試過echo hello等)

debug1: Authentication succeeded (publickey). 
Authenticated to <server> (<ip>:22). 
debug1: channel 0: new [client-session] 
debug2: channel 0: send open 
debug1: Requesting [email protected] 
debug1: Entering interactive session. 
debug2: callback start 
debug2: client_session2_setup: id 0 
debug2: fd 4 setting TCP_NODELAY 
debug1: Sending environment. 
debug1: Sending env LANG = en_US.UTF-8 
debug2: channel 0: request env confirm 0 
debug1: Sending command: uptime 
debug2: channel 0: request exec confirm 1 
debug2: callback done 
debug2: channel 0: open confirm rwindow 0 rmax 32768 
debug2: channel 0: rcvd adjust 2097152 
debug2: channel_input_status_confirm: type 99 id 0 
debug2: exec request accepted on channel 0 

還有它掛起,無限期。

但是,當我沒有一個命令到我的遠程服務器ssh,我得到一個交互式shell,一切都很好。

成功的命令:ssh -v -v <username>@<server>

輸出:

debug1: Authentication succeeded (publickey). 
Authenticated to <server> (<ip>:22). 
debug1: channel 0: new [client-session] 
debug2: channel 0: send open 
debug1: Requesting [email protected] 
debug1: Entering interactive session. 
debug2: callback start 
debug2: client_session2_setup: id 0 
debug2: fd 4 setting TCP_NODELAY 
debug2: channel 0: request pty-req confirm 1 
debug1: Sending environment. 
debug1: Sending env LANG = en_US.UTF-8 
debug2: channel 0: request env confirm 0 
debug2: channel 0: request shell confirm 1 
debug2: callback done 
debug2: channel 0: open confirm rwindow 0 rmax 32768 
debug2: channel_input_status_confirm: type 99 id 0 
debug2: PTY allocation request accepted on channel 0 
debug2: channel 0: rcvd adjust 2097152 
debug2: channel_input_status_confirm: type 99 id 0 
debug2: shell request accepted on channel 0 
Welcome! 
<prompt>% 
... 

有沒有人一個想法,爲什麼一個交互式會話是成功的,但對命令執行不?

幾個月來我一直困擾着我,因爲我無法再一次同步我的文件(它曾經工作過)。任何幫助非常感謝。

+0

我不知道回答你的問題,但我有一個想法。也許在SSH客戶端或SSH服務器上存在配置錯誤。嘗試一個不同的客戶端到同一臺服務器,然後嘗試使用同一個客戶端到不同的服務器,然後讓我們看看哪一個工作。 – pts 2011-05-08 19:01:27

+0

以前在計算器上發佈了一些類似的問題:http://www.google.com/search?q=ssh+command+execution+hangs – 2011-05-08 19:05:13

+0

這不是SSH配置問題 - 它來自不同的客戶端。服務器配置已鎖定,但由其他用戶驗證。這裏發佈的其他問題並不完全相同,我仔細看過他們。 – 2011-05-09 10:19:53

回答

24

的問題的確是我的登錄腳本,雖然沒有與要求終端(我懷疑,並與-t-T選項測試)做的。問題是我的.bashrc正在運行exec(在這種情況下爲zsh - 因爲我們的系統不允許chshzsh)。

出錯行:

test -f /usr/bin/zsh && exec /usr/bin/zsh 

首先檢查交互shell和退出如果是這樣解決的:

[ -z "$PS1" ] && return 
test -f /usr/bin/zsh && exec /usr/bin/zsh 

所以,本質上,這是因爲外殼是execing爲zshssh在等待這完成 - 從未發生過。

我有點困惑爲什麼我的.bashrc被調用 - 我認爲這只是用於交互式shell,但各種init腳本的確切目的和順序是我認爲我永遠不會學的東西。

我希望這對那些在其啓動腳本中有某種exec的人有用。

順便說一句 - 其他兩個答案都在正確的軌道上,所以我完全不確定我是應該「回答」還是隻是評論他們的答案。如果回答我自己的問題在道德上錯誤在stackoverflow,讓我知道,我會做悔改。謝謝其他答覆者。

+1

.bashrc =每當shell被調用並連接到終端時調用。 .bash_profile僅在登錄時調用。的區別是模糊的,但通過回波容易地檢查「回聲我登錄」>〜/ .bash_profile中並執行使用ssh的命令。這樣,你可以看到,如果直接執行命令通過SSH或不使外殼登錄shell。 – Mel 2011-05-11 15:32:16

+0

我運行到完全相同的問題用哦,我的-zsh的,我不得不插入'[-z 「$ PS1」] &&之前'$源ZSH/OH-MY-zsh.sh' return'權,以避免SSH使用另一臺主機作爲代理時吊 – 2016-06-08 13:51:29

2

您在你的shell啓動文件(我假設您提示~/.cshrc;在非交互式會話,~/.login不應該的問題)的命令需要出於某種原因終端。

4

你的問題很可能在於你的shell啓動或shell註銷腳本。不知道里面有什麼,很難猜測實際的問題。

2

我最近遇到同樣症狀的問題,但確定問題是不是在我的登錄腳本中有問題。相反,我的本地.ssh/config文件配置爲RequestTTY force我嘗試複製到的主機。

0

在解決其他新問題後,我在fedora服務器22上遇到了這個問題。

ssh -t ziimp/bin/true可以,但不是ssh ziimp/bin/true,我所有的git + ssh和scp都被鎖定。

我找到的解決方案是在authorized_keys文件。我不得不從我信任的鑰匙刪除命令=「在/ usr /斌/ bash的」前綴...