【问题标题】:Paramiko connect without asking ssh keyParamiko 无需询问 ssh 密钥即可连接
【发布时间】:2014-12-30 00:48:19
【问题描述】:

这是我连接到服务器的 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)

【问题讨论】:

    标签: python linux ssh paramiko ssh-keys


    【解决方案1】:

    我遇到了同样的问题。我认为这里的其他答案没有意识到这个问题的真正目的。这是一个老问题,但我想帮助像我这样在谷歌搜索后来到这里的人。

    您需要禁用 ssh 代理功能 allow_agent=False,然后它将不再提示您输入密码。 Paramiko 正在尝试连接到 ssh 代理,我假设尝试读取密钥。我还添加了look_for_keys=False,因为它将禁用检查要使用的私钥。

    例子:

    client.connect(server, port=port, username=username, password=password, look_for_keys=False, allow_agent=False)
    

    【讨论】:

      【解决方案2】:

      我的建议是生成不带密码的密钥 - 在创建密钥时要求输入密码时只需按 Enter。

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

      与在脚本中硬编码密码相比,无密码密钥具有一些优势:

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

      一些安全注意事项:

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

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

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

      【讨论】:

        【解决方案3】:

        我解决了这个问题

        ssh-copy-id root@192.168.43.133
        

        感谢http://sshmenu.sourceforge.net/articles/key-setup.html

        【讨论】:

          【解决方案4】:

          您可以将指纹添加到每个服务器的 known_hosts。对于单个用户:

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

          将您的连接主机 ip 添加到 known_hosts 然后它不会询问任何问题,例如 您确定要继续连接(是/否)? 或者如果您也想禁用密码询问,请检查此链接 http://www.linuxproblem.org/art_9.html https://www.debian.org/devel/passwordlessssh

          【讨论】: