实现一个shell脚本实现ssh-copy-id批量自动发送公钥到远程主机
要实现一个shell脚本来批量自动发送公钥到远程主机,首先需要编写一个能够自动输入密码的ssh-copy-id脚本。这个脚本可以通过循环遍历存储了目标远程主机IP的列表,然后使用ssh-copy-id命令自动将本地公钥发送到远程主机上。
首先,我们可以创建一个存放目标远程主机IP的文本文件,比如叫做hostlist.txt。然后我们可以编写一个shell脚本,比如叫做auto_ssh_copy_id.sh。在这个脚本中,我们可以使用一个for循环来逐个读取hostlist.txt中的IP地址,并对每个IP地址执行ssh-copy-id命令来发送公钥。
在for循环中,我们可以使用sshpass命令来自动输入密码,这样就可以避免手动输入密码的步骤。脚本的大致流程可以是先使用sshpass输入密码登录远程主机,然后再执行ssh-copy-id命令来发送公钥。完成后,再循环至下一个IP地址,直到hostlist.txt中的所有IP地址都被处理完毕。
最后,我们可以将这个shell脚本赋予可执行权限,并在终端中运行它。这样就能够批量自动发送公钥到远程主机了。这个方法可以节省大量时间,同时也更加方便和高效。
怎么删除添加的ssh-copy-id node
如何移除通过 ssh-copy-id
命令添加到节点上的 SSH 密钥
为了从远程服务器上删除由 ssh-copy-id
添加的公钥,可以按照以下方法操作:
方法一:手动编辑 .ssh/authorized_keys
可以直接登录目标机器并编辑位于用户家目录下的 .ssh/authorized_keys
文件来实现这一点。
nano ~/.ssh/authorized_keys
找到对应于要删除的那个客户端主机所贡献的那一行内容,并将其删除。保存更改后退出编辑器即可完成操作[^1]。
方法二:使用命令自动处理
也可以利用简单的 shell 脚本来批量清理不再需要的信任关系:
sed -i '/<public-key-string>/d' ~/.ssh/authorized_keys
这里的 <public-key-string>
应替换为实际想要匹配的具体字符串部分,即代表特定用户的公钥信息。这种方式适合当有多个条目时快速定位和清除指定记录[^2]。
需要注意的是,在执行上述任何一种方式之前,请务必确认已经备份好原始文件以防误删重要数据;另外还要确保当前拥有足够的权限来进行这些修改动作。
用shell写一个批量推送公钥的脚本
可以使用以下脚本批量推送公钥:
#!/bin/bash
# 读取公钥文件路径和目标主机列表文件路径
read -p "请输入公钥文件的绝对路径:" pubkey_path
read -p "请输入目标主机列表文件的绝对路径:" hostlist_path
# 读取登录用户名和登录密码
read -p "请输入登录用户名:" username
read -s -p "请输入登录密码:" password
echo
# 循环遍历目标主机列表文件中的主机名
while read hostname; do
echo "正在推送公钥至主机 ${hostname} ..."
# 将公钥文件推送至目标主机的~/.ssh/authorized_keys文件中
sshpass -p "${password}" ssh-copy-id -o StrictHostKeyChecking=no -i "${pubkey_path}" "${username}@${hostname}"
echo "公钥推送完成!"
done < "${hostlist_path}"
使用方法:
- 将以上脚本保存为
push_pubkey.sh
- 给脚本添加执行权限:
chmod +x push_pubkey.sh
- 运行脚本:
./push_pubkey.sh
- 按照提示依次输入公钥文件路径、目标主机列表文件路径、登录用户名和登录密码即可。目标主机列表文件中每行一个主机名。
注意:此脚本依赖于sshpass
工具,如果你的系统中没有安装,请先安装该工具。
相关推荐
















