在无需提示的情况下通过脚本中的 ssh-copy-id 将我的 ssh 密钥复制到远程机器?

在无需提示的情况下通过脚本中的 ssh-copy-id 将我的 ssh 密钥复制到远程机器?

我的用例是,我需要复制我的 ssh 密钥,以便授权访问远程计算机。我需要能够调用一个脚本,将我的 ssh 密钥复制到远程计算机,而无需我的输入。目前,它会提示输入密码,并要求输入 RSA 指纹。 我需要它能够通过 IP 范围自动将我的主机相互添加

答案1

我相信您可以使用 sshpass。

  • Ubuntu/Debian:apt-get install sshpass
  • Fedora/CentOS:yum install sshpass

例如:

sshpass -p "PASSWORD" ssh-copy-id -o StrictHostKeyChecking=no USERNAME@IP

答案2

对于 ssh 密码提示,请尝试使用ansible/ansible-playbook -k/--ask-pass。它将调用(仅供参考,也许 OSX默认sshpass不附带)。sshpass

对于主机密钥检查,添加

[defaults]
host_key_checking = False

在 ~/.ansible.cfg 或 /etc/ansible/ansible.cfg 中。

或者export ANSIBLE_HOST_KEY_CHECKING=False像这样手动的说。

对于 ssh 密钥部署,使用授权密钥ansible playbook 中的模块。用户可以更轻松地保持脚本的幂等性。

答案3

如果您愿意输入一次密码,以下脚本将会非常快速地将您的 ssh 密钥复制到大量主机(在 hosts.txt 中列出),而无需在命令行中输入您的密码:

# sudo yum install moreutils sshpass openssh-clients
echo 'Input Password:';
read -s SSHPASS;
export SSHPASS;
parallel -i -j 25 sshpass -e ssh-copy-id '-o ConnectTimeout=10 -o StrictHostKeyChecking=no {}' -- `cat hosts.txt`;
export SSHPASS=''

相关内容