2012-08-14 36 views
0

測試遠程訪問,我有以下命令來檢查,如果遠程客戶端許可證使用ssh登錄,而無需通過使用ssh

ssh -o PasswordAuthentication=no \ 
    [email protected]$REMOTE_HOST_IP 1>/dev/null 2>/dev/null 

,執行指令,如果permission=no我在代碼的其餘部分設置權限。順便說一句,「許可被拒絕的消息被髮送到/ dev/null」。但是當我第二次執行我的命令時,這一次permission=yes和我必須登錄到機器,但它掛起,因爲我認爲沒有錯誤或輸出。因爲我試過它,就像我獲得代碼權限一樣;

ssh -o PasswordAuthentication=no [email protected]$REMOTE_HOST_IP 

這次工作。

那麼,如何安排它發送錯誤消息的第一時間,而不是在休息

編輯發:我可以解釋簡單,我的questin是,說我在我的腳本命令可以給出錯誤我第一次運行我的腳本,所以我不希望看到erorrs和輸出,我運行它

command 1>/dev/null 2>/dev/null(it is in my script) 

當我運行腳本第二次,該命令將不給錯誤和輸出becaue我做了一些操作,所以它沒有錯誤。但是當它第二次運行時,它會掛起/ dev/null(我認爲是這樣)。因爲當它在沒有/ dev/null的情況下運行時,它工作正常

+0

第一個命令中沒有輸出或錯誤消息,因爲您將STDOUT和STDERR都發送到/ dev/null,這是數據接收器,所有內容都被丟棄。 我不明白你的問題的其餘部分。請澄清。 – mpe 2012-08-14 09:29:31

+0

@mpe是沒有錯誤信息在我發送的第一個原因。但在deffaault它必須給予權限被拒絕的消息,所以我發送到dev null.at我有權限的腳本的其餘部分。當我第二次運行腳本。該命令掛起因爲沒有錯誤消息,因爲我有證書到達client.so我需要第二次工作命令 – barp 2012-08-14 09:33:01

+0

注意:'>/dev/null 2>&1'是'1>/dev的常見習慣用法/ null 2>/dev/null'。在極少數情況下,我會使用'>& - 2> & -';這實際上會關閉fd 1和2 - 但謹慎使用 - 不是所有類似的命令。 – 2012-08-14 11:19:48

回答

1

添加一條命令在另一端執行。

我通常使用:echo ok。第一個不應該產生任何輸出,我喜歡錯誤消息。

[email protected]$REMOTE_HOST_IP 

ssh -o PasswordAuthentication=no $remote_account : 2> /dev/null 

ssh -o PasswordAuthentication=no $remote_account echo ok | grep ok 

你的問題的其餘部分還不是很清楚。

1

目前尚不清楚你正在嘗試做什麼。

如果你不指定命令,ssh會創建一個shell,但是你的所有輸出都是定向/dev/null,所以你什麼都看不到。它看起來像被吊死了,但事實並非如此,它只是在等待你輸入comamnds。如果輸入exit + ENTER,它將從shell中退出。

ssh -o PasswordAuthentication=no [email protected]$REMOTE_HOST_IP 'command here' 
1

該腳本沒有掛起,因爲沒有錯誤消息。它掛起,因爲ssh正在等待你的輸入。如果你給ssh一個命令來運行,如Henk所示,那麼ssh將運行該命令然後退出。如果你不給它一個命令,它將啓動一個交互式shell。 shell打印一個提示(例如「$」)並等待你輸入。您無法看到提示,因爲您正在將所有輸出發送到/dev/null

亨克的代碼會使你的腳本工作,因爲如果登錄成功,它將運行一個非常短的命令,然後返回控制給你。