2014-10-29 53 views
3

我寫簡單的代碼是:如何提供蟒蛇面料公鑰密碼短語

env.host_string = '15.21.18.24' 
with settings(user=user, key_filename='/home/amby/.ssh/id_rsa.pub'): 
    put(local_path, remote_path) 

現在我pass_phrase的公鑰。我如何編碼密碼短語?我想它是自動的。

現在它是要求密碼短語。

[email protected]:~/Desktop$ python fabric_test.py 
[15.21.18.24] Passphrase for private key: 

回答

10

關於術語的快速註釋。如提示所示,該密碼用於私鑰密鑰。使用ssh密鑰對時,密鑰分爲兩部分 - 私鑰需要保持安全,並且祕密且永遠不會離開ssh啓動會話。公鑰可以安全共享,並且可以自由傳輸。

當您嘗試自動執行ssh事務並且您必須提供密碼時,並且您正在考慮在腳本或配置中的某處存儲密碼時,那麼密碼不再是祕密,您也可以沒有密碼


一對夫婦的事情,你可以嘗試

1)不要使用密碼打擾!它們是可選的。生成沒有密碼的密鑰,供腳本使用。很明顯,這比有一個密鑰對的安全性要低,你應該採取額外的步驟來鎖定它。 您可以通過在遠程主機的authorized_keys文件中提供其他參數來限制此ssh密鑰有權運行的命令。通過這種方式,您可以擁有不太安全的密鑰,但限制了任何設法訪問私鑰的人都可以執行的操作。

您可以使用ssh-keygen生成一個新的密鑰對。爲它提供一個新的文件名,只需在提示輸入密碼時按回車鍵,這將爲您提供一個新的用於腳本的私有/公用密鑰對,該密鑰對不需要密碼輸入。

authorized_keys文件需要存在於遠程主機上的遠程用戶帳戶的~./ssh目錄中。一個典型的鍵入將如下所示(爲清楚起見,我已截斷了關鍵指紋)。如果你還沒有一個,你可以做一個新的。對於此文件,您需要添加新密鑰對中密鑰文件public的文本。這是一個.pub擴展名。公鑰文本具有這種格式。

支持SSH-RSA AAAAB3NzaC1yc ... [email protected]

它由幾個領域都在同一行,用空格隔開的。第一個領域是關鍵類型。長字符串和數字編碼密鑰對的公鑰。最後一個字段是幫助識別人類密鑰的註釋,通常它具有生成密鑰的用戶名和主機名。您可以選擇將一個選項字段添加到鍵入口的前面。這包含逗號分隔的一組選項值,適用於通過此密鑰對啓動的會話。 您可以將command參數添加到授權密鑰的選項字段中,以標識允許密鑰運行的特定命令。這可以用來限制無密碼密鑰對允許執行的操作。

命令= 「/ USR/bin中/ LS」 SSH-RSA AAAAB3NzaC1yc ... [email protected]

此密鑰對只能運行 'ls' 的遠程。


2)使用ssh-agent。如果您在執行腳本時在shell環境中擁有經過身份驗證的代理,則它將提供ssh密鑰憑據,而無需每次都提供密碼。

典型用途:

您在shell中運行

eval `ssh-agent` 

啓動代理守護進程。 eval表達式會導致在shell環境中設置代理會話環境變量。現在

可以運行

ssh-add ~/.ssh/my-passphraseless-private-key.rsa 

加載專用鑰匙插入劑。代理將要求您輸入密碼以解鎖密鑰。然後它將緩存shell的生命週期的憑證。因此,您可以運行使用此密鑰的腳本,並且不需要提示輸入密碼。