【问题标题】:multiple passwords in sshpasssshpass 中的多个密码
【发布时间】:2025-12-03 10:05:02
【问题描述】:

有没有办法在使用 sshpass 命令时尝试多个密码?我有一个名为 hosts.txt 的 txt 文件,其中列出了多个系统 IP 地址,并且每个系统使用不同的密码(例如 - 'mypasswd'、'newpasswd、nicepasswd')。该脚本读取 hosts.txt 文件并在每个系统上执行一组命令。由于我不知道哪个系统使用这些给定密码中的哪一个,我想尝试所有这些设置以及 sshpass 命令并使用有效的密码执行脚本。这可能吗?

#!/bin/bash

while read host; do
  sshpass -p 'mypasswd' ssh -o StrictHostKeyChecking=no -n root@$host 'ls;pwd;useradd test'
done < hosts.txt

【问题讨论】:

    标签: linux bash shell unix sshpass


    【解决方案1】:

    不是尝试获取基于密码的身份验证,而是设置基于密钥的身份验证的选项吗?然后,您可以将您的一个公钥添加到所有系统,也可以选择生成不同的公钥并使用-i keyfile 选项或在 ssh 配置文件中创建一个条目,如下所示。

    Host a
      IdentityFile /home/user/.ssh/host-a-key
    

    【讨论】:

    • 我可以使用相同的脚本生成密钥并推送到所有系统吗?抱歉,我不熟悉 ssh-keygen .. 我应该如何修改脚本才能做到这一点?非常感谢。
    • 您需要使用 ssh-keygen 生成公钥/私钥对。用密码保护密钥很好,但如果你打算将它用于非交互式的东西,那么你可能不想要密码。所以只需运行ssh-keygen 并按照说明进行操作。之后,您需要将公钥(默认为 id_rsa.pub)添加到目标机器上用户的~/.ssh/authorized_keys 文件中。从那时起,您可以在没有密码的情况下安全地 ssh。