2014-12-18 99 views
1

我目前運行具有以下命令的服務器測試:發送關閉信號SSH立即密碼提示

echo ^C |ssh -q [email protected]${server} 
if [ 0 -ne $? ]; then 
    echo "==> Failed to connect..."; continue 
fi 

遺憾的是它並不像我^C是這是一個密碼提示後立即關閉連接我期待什麼。有沒有更好的方式來寫這個測試ssh連接而不掛在提示符上?

+1

'0!= = $(echo $?)'???如果不會產生錯誤信息,我會感到驚訝。無論如何,你可以將它減少到'if [$? -ne 0];然後'。並且很遺憾地說,我認爲你原來的論文不會工作。它很複雜,所以如果你不能很快地推進你的代碼,那麼開始閱讀'expect'來支持你的測試。祝你好運。 – shellter

+0

@Academia echo $'cc'| ssh root @ hostname似乎沒有工作=/ – ehime

+0

@shellter是的,我認識的錯誤編碼;)改變,以反映你所說的 – ehime

回答

3

在unix系統上,^C殺死一個進程,因爲當用戶鍵入^ C時,TTY接口向進程發送中斷信號。標準輸入上的文字^ C(從文件讀取或從另一個進程的輸出打印到管道中)只是一個常規字符。

您可以通過類似這樣運行的ssh抑制密碼認證:

ssh -o PasswordAuthentication=no -q [email protected]${server} 

ssh將有故障代碼退出如果不能使用密碼以外的東西來驗證。此失敗代碼與連接失敗無法區分,因此這可能不是您想要的。

如果您主要對連接到遠程SSH服務器端口感興趣,則不必使用實際的ssh程序進行測試。例如,你可以做這個測試與nc (netcat)

$ nc -z localhost 22 
$ echo $? 
0 
$ nc -z localhost 11122 
$ echo $? 
1 

-z標誌告訴netcat來測試連接到指定的主機和端口不發送或接收任何數據。你可以像這樣構造你的測試:

if nc -z localhost 22 
then 
    : success 
else 
    echo Connection to ${server} failed 
fi 
+0

@愛姬:我的意思是「這很複雜」。 -) 祝你們好運。 – shellter

+0

乾杯,+1並被接受。非常感謝 – ehime