我对 shell 脚本领域还很陌生,我在 centos 服务器中编写了一个 shell 脚本,用于将其 ssh 密钥复制到一些 ubuntu 主机。我的脚本如下所示。
#!/bin/bash
path="/root/keygen/source.txt";
for p in `cat "$path"`;
do echo "$p"
echo "mypassword" | ssh-copy-id root@"$p" --stdin > /dev/null
echo "key copied"
done
该文件/root/keygen/source.txt
包含 ubuntu 机器的 ip 地址。ubuntu 主机的 root 密码为“mypassword”,本地 ip 为 192.168.0.10
但是当我运行这个脚本时,它卡住了,并要求输入我在脚本中已经提供的 root 密码 192.168.0.10。脚本中有什么问题吗?请建议我更正这个程序,以便它获取我提供的列表中的所有 IP 地址并复制其 ssh 密钥而不要求输入密码。请注意,所有机器都有相同的 root 密码。
提前致谢。
答案1
由于多种安全原因,SSH 不应使用通过管道提供的密码。但有一些替代方案:
- SSH_ASKPASShttp://manpages.ubuntu.com/manpages/trusty/man1/ssh.1.html
- 密码http://manpages.ubuntu.com/manpages/trusty/man1/sshpass.1.html
也可以看看https://stackoverflow.com/questions/1340366/how-to-make-ssh-receive-the-password-from-stdin