2014-11-03 81 views
1

這是我的python腳本連接到服務器。但是當我運行該腳本時,它要求我輸入我的ssh密碼。我怎麼能避免問我的SSH口令密鑰?Paramiko連接時不詢問SSH密鑰

host = '192.168.43.3' 
user = 'root' 
passwd = 'ppawd' 
ssh = paramiko.SSHClient() 

ssh.load_system_host_keys() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(host, username=user, password=passwd) 
transport = ssh.get_transport() 
channel = transport.open_session() 
channel.setblocking(1) 
channel.settimeout(30) 
command = "ls -a" 
ssh.exec_command(command) 

回答

1

我的建議是在沒有密碼的情況下生成一個密鑰 - 只需在創建密鑰時詢問密碼時按Enter即可。

此密鑰應該專門用於腳本 - 避免重複使用您用於其他用途(例如用戶的交互式登錄)的密鑰,因爲它使密鑰的撤銷和訪問控制變得更加困難。

密碼短語少鍵相比於在腳本中硬編碼密碼的一些優點:

  • 口令無鍵的存在使得清楚的人,關鍵是隻要任何人有損害訪問它。從密鑰中分離密碼隱藏了這一事實,而沒有提供任何額外的安全性。
  • 它可以避免你不小心將你的密碼發佈到源代碼管理(源代碼和訪問控制憑證的分離)
  • 可能會使它不適合重新使用任何現有用戶的ssh密鑰和適當的密碼。

一些安全方面的考慮:

請記住,任何人都可以訪問該密鑰將能夠訪問遠程系統。如果可能的話,您可以考慮在密鑰文件上添加限制權限,併爲您的腳本創建一個單獨的用戶以登錄到遠程系統。

如果你的腳本是單一的目的,你也可以考慮限制的shell命令可用列表中的用戶在遠程系統上

如果您有存儲密鑰的系統(即在沒有物理安全:筆記本電腦或桌面在不受信任的位置),您可能還想使用全盤加密,塊設備加密(LUKS)或文件級加密(encfs)。

1

您可以將指紋添加到每個服務器的known_hosts。對於單個用戶:

cat ~/.ssh/known_hosts 
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts 

您連接的主機IP地址添加到known_hosts的話,就不會要求像 任何問題,你確定要繼續連接(是/否)? 或者如果u要禁用密碼要價太高,然後檢查該鏈接 http://www.linuxproblem.org/art_9.html https://www.debian.org/devel/passwordlessssh