2012-01-31 68 views

回答

8

對於一般的命令行自動化,Expect是經典工具。或者如果你更喜歡Python,可以試試pexpect

下面是建議使用期待一個類似的問題:Use expect in bash script to provide password to SSH command

+0

我們應該停止推廣期望作爲自動化ssh的方式。 Ssh故意使這些提示很難自動化,以推動我們使用正確的解決方案:命令行標誌繞過確認和公鑰/私鑰以消除密碼提示。 – 2016-05-13 14:40:45

+1

這很理想,但現實世界往往不理想。對於這個問題,這是通常的做法。如果您使用了密鑰,那麼您可能也需要在密鑰上輸入密碼,然後您可能會遇到同樣的情況。當然,你可以使用'ssh-agent','keychain'等,但有時候會有不便或不切實際的原因。 – jjlin 2016-05-17 00:42:24

7

肯定是...使用的菌種,期待,併發送命令:

還有更多的例子遍佈堆棧溢出,請參閱: Help with Expect within a bash script

根據您的系統,您可能需要首先安裝這些命令。

+0

我們應該停止推廣期望作爲自動化ssh的方式。 Ssh故意使這些提示很難自動化,以推動我們使用正確的解決方案:命令行標誌繞過確認和公鑰/私鑰以消除密碼提示。 – 2016-05-13 14:40:56

14

對於簡單的輸入,比如兩個提示和兩個相應的固定的響應,你也可以使用「立即文檔」,語法這看起來是這樣的:

test.sh <<! 
y 
pasword 
! 

的< <前綴的模式,在這個案例 '!'。一切以該模式開始的行被解釋爲標準輸入。這種方法類似於將多行echo傳遞到ssh的建議,只是它保存了echo命令的fork/exec,我發現它更具可讀性。另一個優點是它使用了內置的shell功能,所以它不依賴於期望。

+0

我收回它,ssh通過一個tty設備提示,繞過標準輸入。用Emily Litella的話來說,「沒關係」。 :) – 2012-09-25 04:48:17

+0

更簡單如此最好 – Abid 2014-04-28 06:46:18

0

SSH密鑰與密碼,與鑰匙串

鑰匙鏈是一個小工具,其管理以您的名義ssh-agent和允許的ssh-agent保持運行的登錄會話結束時。在後續登錄中,鑰匙串將連接到現有的ssh-agent實例。實際上,這意味着必須在重新啓動後首次登錄時輸入密碼。在後續登錄中,將使用來自現有ssh-agent實例的未加密密鑰。這對於允許無密碼ssh密鑰的cron作業中的無密碼RSA/DSA身份驗證也很有用。

要啓用鑰匙串,請安裝鑰匙串並在〜/中添加如下內容。bash_profile:

eval keychain --agents ssh --eval id_rsa 從安全角度來看,ssh-ident和keychain比ssh-agent實例更受限於特定會話的生命週期,但它們提供了高級別的便利。爲了提高鑰匙串的安全性,有些人在他們的〜/ .bash_profile鑰匙串調用中加入了--clear選項。通過這樣做,必須在登錄時重新輸入密碼,但在用戶註銷後,cron作業仍然可以訪問未加密的密鑰。鑰匙串wiki頁面包含更多信息和示例。

收到此信息;

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

希望這有助於

我個人能夠在終端啓動自動輸入我的密碼通過執行此操作:(你當然可以,修改腳本,它適合你的需要)

  1. 編輯bashrc文件以添加此腳本;

    檢查SSH代理清醒

    如果[-z 「$ SSH_AUTH_SOCK」];然後 EXEC的ssh-agent的bash -c 「SSH-增加; $ 0」 回聲 「的SSH代理被驚醒」 退出 網絡

    上面一行將開始在終端推出的預期腳本。

    ./ssh.exp

這裏有此內容的expect腳本

#!/usr/bin/expect 

set timeout 20 

set passphrase "test" 

spawn "./keyadding.sh" 

expect "Enter passphrase for /the/path/of/yourkey_id_rsa:" 

send "$passphrase\r"; 

interact 

這裏是我的keyadding.sh腳本的內容(你必須把兩個腳本在你的主文件夾,一般是/ home/user中)

#!/bin/bash 

ssh-add /the/path/of/yourkey_id_rsa 

exit 0 

我會強烈建議加密PA在.exp腳本中使用ssword,以及將這個.exp文件重命名爲term_boot.exp或任何其他用於安全目的的文件。不要忘記使用nano或vim直接從終端創建文件(例如:nano ~/.bashrc | nano term_boot.exp)以及chmod +x script.sh以使其可執行。 A chmod +r term_boot.exp也是有用的,但是你必須在你的bashrc文件中的./ssh.exp之前添加sudo。因此,每次啓動終端時,您都必須輸入您的sudo密碼。對我來說,這比密碼更方便,因爲我記得爐旁的管理員(sudo)密碼。

此外,這是另一種方式來做到這一點,我認爲; https://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/

當我有時間的時候,肯定會改變我的這個方法。

相關問題