2017-09-26 179 views
0

的時候如果我想使用密碼公鑰密碼輸入,我可以做到這一點:如何避免使用ssh

`sshpass -f <(printf '%s\n' your_password) ssh [email protected]` 

但sshpass似乎不工作的公鑰。我嘗試了下面的命令,它失敗了:

`sshpass -f <(printf '%s\n' your_passphrase) ssh -o PreferredAuthentications=publickey [email protected]` 

有沒有什麼好的方法可以做到這一點?

+0

使用'ssh-agent'。 – choroba

+0

@choroba可以請你更具體嗎? Thx –

+0

在運行會話時啓動'ssh-agent',然後使用'ssh-add'將密鑰添加到它 - 您將被要求輸入密碼,但是您可以使用'ssh'而不必再次輸入密碼。 – choroba

回答

0

使用參數-P sshpass -Ppassphrase -f <(printf的 '%S \ n' your_passphrase)SSH -o PreferredAuthentications =公鑰用戶@主機名

+0

我試過了,它說-P不是一個選項... –

1

到底爲什麼你要爲了使用sshpass放入公鑰?

如果您想在交互式情況下使用您的公鑰而沒有密碼提示,只需使用ssh agent即可。至少在Ubuntu上,它默認運行。您只需添加您想要的密鑰並輸入一次密碼即可。

如果您想從腳本執行此操作,只需創建密鑰的未加密版本即可。它與使用sshpass一樣安全(如果不是更安全),並且節省使用其他程序的麻煩。

從個人的角度來看,我從頭開始寫了幾個開源項目。在四個左右獲得了一些知名度,沒有讓我感到驚訝,比sshpass更多。這是一天的工作,旨在解決一個特定的角落案件。 我知道它比我最初預期的要有用得多,但是我真的沒有看到任何情況下,如果公鑰認證是一個選項,那麼使用它是有意義的。

+0

ssh代理的問題是當執行'ssh-add ',密碼是必需的,但我需要整個過程是非交互式的。原因是我正在開發一個需要執行命令的項目,因爲其他用戶的用戶名和公鑰都是給定的。 –

+0

@yurenzhong然後使用'ssh-keygen'從私鑰中刪除密碼。該解決方案比在腳本文件中存儲密碼更安全。 –