实现一个shell脚本实现ssh-copy-id批量自动发送公钥到远程主机
时间: 2023-12-28 16:02:12 浏览: 97
要实现一个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脚本赋予可执行权限,并在终端中运行它。这样就能够批量自动发送公钥到远程主机了。这个方法可以节省大量时间,同时也更加方便和高效。
相关问题
shell脚本 批量推送公钥
### 回答1:
批量推送公钥可以通过使用 SSH 的 authorized_keys 文件来实现。下面是一个示例脚本,可以将本地的公钥推送到多个远程主机上:
```bash
#!/bin/bash
# 设置需要推送的公钥文件路径
pubkey_path=~/.ssh/id_rsa.pub
# 读取需要推送的主机列表
read -p "Enter remote hosts (separated by space): " hosts
# 读取需要推送的用户
read -p "Enter remote user: " user
# 循环遍历主机列表,将公钥复制到 authorized_keys 文件
for host in $hosts; do
ssh $user@$host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && cat >> ~/.ssh/authorized_keys" < $pubkey_path
done
```
在运行脚本时,会提示输入需要推送公钥的远程主机列表和远程用户,然后将本地的公钥文件复制到远程主机的 authorized_keys 文件中。注意,脚本需要在本地已经存在公钥文件,并且需要在远程主机上安装了 SSH 服务。
### 回答2:
批量推送公钥是一种在多个远程服务器上自动化部署公钥的方法,可以方便地实现无需人工干预的SSH远程登录。
在Shell脚本中,我们可以使用以下的步骤来批量推送公钥:
1. 在脚本中定义一个包含远程服务器IP地址的数组,例如:
```
servers=("192.168.1.101" "192.168.1.102" "192.168.1.103")
```
2. 使用一个循环结构来遍历数组中的IP地址,并执行以下操作:
a. 生成公钥对(如果不存在的话):
```
if [ ! -f ~/.ssh/id_rsa.pub ]; then
ssh-keygen -t rsa -q -N '' -f ~/.ssh/id_rsa
fi
```
b. 使用ssh-copy-id命令将公钥拷贝到远程服务器:
```
ssh-copy-id user@$server
```
其中,`user`是远程服务器登录的用户名,`$server`是当前遍历到的IP地址。
3. 将以上代码保存为一个Shell脚本文件(例如`push_keys.sh`),并添加执行权限。
4. 在终端中执行Shell脚本:
```
./push_keys.sh
```
这样,脚本将会自动遍历数组中的每个IP地址,生成并推送公钥到对应的远程服务器上。
需要注意的是,在执行ssh-copy-id命令时,可能会提示输入远程服务器的登录密码。为了避免这个问题,可以事先使用SSH Agent来管理私钥,或者在远程服务器上配置免密码登录。
希望以上回答对您有帮助!
### 回答3:
Shell脚本批量推送公钥是一种方便快捷的方式,可以帮助用户在多台远程服务器上进行公钥的部署。下面是一个简单的Shell脚本示例:
```
#!/bin/bash
# 指定要推送的公钥文件路径
public_key_file="path_to_public_key.pub"
# 定义要连接的远程服务器列表
remote_servers=("server1" "server2" "server3")
# 循环遍历远程服务器列表
for remote_server in "${remote_servers[@]}"
do
# 使用ssh-copy-id命令将公钥推送到远程服务器
ssh-copy-id -i $public_key_file $remote_server
# 检查推送是否成功
if [ $? -eq 0 ]
then
echo "公钥已成功推送到服务器 $remote_server"
else
echo "公钥推送失败到服务器 $remote_server"
fi
done
```
以上脚本假设您已经在本地生成了一个公钥文件,并且将路径存储在`public_key_file`变量中。您需要将`remote_servers`变量替换为您要推送公钥的实际远程服务器列表。
脚本中使用的`ssh-copy-id`命令可以将公钥复制到远程服务器的`~/.ssh/authorized_keys`文件中,完成公钥部署。在每个循环迭代中,脚本会检查命令的返回值来确定公钥是否成功推送到远程服务器。
使用这个Shell脚本,您可以轻松地在多台远程服务器上批量推送公钥,提高工作效率并加强服务器安全性。
用shell写一个批量推送公钥的脚本
可以使用以下脚本批量推送公钥:
```bash
#!/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}"
```
使用方法:
1. 将以上脚本保存为`push_pubkey.sh`
2. 给脚本添加执行权限:`chmod +x push_pubkey.sh`
3. 运行脚本:`./push_pubkey.sh`
4. 按照提示依次输入公钥文件路径、目标主机列表文件路径、登录用户名和登录密码即可。目标主机列表文件中每行一个主机名。
注意:此脚本依赖于`sshpass`工具,如果你的系统中没有安装,请先安装该工具。
阅读全文