Paramiko连接,无需询问ssh密钥

2024-10-01 09:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文

这是连接到服务器的python脚本。但是当我运行脚本时,它要求我输入ssh密码。如何避免询问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)

Tags: 服务器脚本hostparamiko密码channel密钥root
3条回答

我的建议是生成一个没有密码短语的密钥-在创建密钥时,如果要求输入密码,只需按enter键。在

此密钥应专门用于脚本-避免重复使用用于其他目的的密钥(如用户的交互式登录),因为这会使密钥吊销和访问控制更加困难。在

与在脚本中硬编码密码相比,无密码短语密钥有一些优点:

  • 无密码片语密钥的存在使任何人都清楚地知道,只要有人能够访问该密钥,该密钥就会被泄露。将密码与密钥分开隐藏了这一事实,而不提供任何额外的安全性。在
  • 它避免您意外地将密码发布到源代码管理(源代码和访问控制凭据分离)
  • 有可能,这将使使用正确的密码短语重新使用任何现有用户的ssh密钥变得不那么诱人。在

一些安全注意事项:

请记住,任何有权访问该密钥的人都可以访问远程系统。如果可能的话,您可以考虑对密钥文件设置限制性权限,并为脚本在远程系统中登录创建一个单独的用户。在

如果您的脚本是单一用途的,您还可以考虑限制远程系统上用户可用的shell命令列表

如果您在存储密钥的系统上没有物理安全性(例如:位于不受信任位置的笔记本电脑或台式机),您可能还需要使用完整磁盘加密、块设备加密(LUKS)或文件级加密(encfs)。在

我把问题解决了

ssh-copy-id root@192.168.43.133

记入http://sshmenu.sourceforge.net/articles/key-setup.html

您可以将指纹添加到每个服务器的已知主机上。对于单个用户:

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

将您的连接主机ip添加到已知的主机,则它不会询问任何问题,例如 是否确实要继续连接(是/否)? 或者如果你想禁用密码询问,那么检查这个链接 http://www.linuxproblem.org/art_9.htmlhttps://www.debian.org/devel/passwordlessssh

相关问题 更多 >