2015-10-15 164 views
3

在一個典型的Unix系統,如果我嘗試將原料密碼進入SSH通過管道,我會得到一個錯誤,如爲什麼SSH不能在標準輸入上使用管道密碼?

$ echo password | ssh [email protected] 
Pseudo-terminal will not be allocated because stdin is not a terminal. 

完全一樣的東西將與鍵盤輸入,我的理解標準輸入提供工作完全相同的方式。

我不感興趣,在將原料密碼SSH(這將是可怕的太多的理由可以列出)

我想知道什麼是在標準輸入之間的這種情況下,不同的鍵盤和標準輸入來自Unix管道。

編輯:我知道SSH密鑰的存在以及如何使用它們。我也知道,將明文密碼傳遞給ssh是個不錯的主意。這個問題只是關於理解管道的stdin和鍵盤的stdin之間發生了什麼不同。

+0

你爲什麼使用密碼?改爲使用基於密鑰的驗證 –

回答

1

正如在另一個答案中提到的,安全性是原因。

從技術角度來看,通過執行echo password | ssh [email protected],您將字符串推送到管道,角色正在等待ssh側讀取。但大多數密碼提示在顯示提示之前會截斷此輸入(並將其修改爲不顯示字符 - 稍後介紹)。

要回答關於差異的最後一個問題,兩者都是某種管道,但是當您在另一端有終端時,您可以使用控制字符與此端進行通信,並且您可以讀取/設置終端的特定屬性,這兩者在echo的正常管道上都顯然失效。

錯誤信息是由以下事實引起的:當您從終端讀取密碼時,您修改了終端屬性,因此它不會顯示寫入的字符(所謂的raw mode)。如果ssh程序無法與終端進行通信,則會失敗。

相關問題