2014-11-03 83 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