
使用Shell脚本自动化批量发送公钥至远程主机的方法
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文介绍了如何利用Shell脚本实现将公钥自动分发到多台远程服务器上,简化SSH登录流程,提高工作效率。
在IT行业中,SSH(Secure Shell)是一种用于在网络之间安全地执行命令和传输数据的协议。在多台远程主机上进行自动化运维时,通常需要通过SSH建立无密码登录,以简化管理流程。`ssh-copy-id`命令是SSH的一部分,用于将本地的公钥复制到远程主机的`.ssh/authorized_keys`文件中,从而实现免密登录。本段落将详细讲解如何使用shell脚本来批量执行`ssh-copy-id`,以提高效率。
### 需求
批量自动化地将本地的SSH公钥发送到一系列远程主机。这在管理大量服务器或集群时非常有用,避免了手动逐个配置的繁琐过程。
### 环境
为了确保脚本能够顺利运行,需要关闭以下服务:
- **firewalld**:防火墙可能阻止SSH连接,关闭它可以确保SSH通信畅通。
- **SELinux**:安全增强型Linux,其严格的安全策略可能限制了SSH的行为,关闭它可以使脚本不受限制。
### 实现方式
#### 使用`sshpass`命令
`sshpass`是一个用于提供非交互式SSH密码认证的工具。在脚本中,我们可以通过`sshpass`传递密码,然后使用`ssh-copy-id`将公钥发送到远程主机。以下是一个简单的示例脚本(`ssh-sshpass.sh`):
```bash
#!binbash
NET=172.20.200
USER=(root hechunping)
PASSWORD=123456
# 生成SSH公钥(如果没有的话)
ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &> /dev/null
# 修改SSH配置,禁用StrictHostKeyChecking
sed -i s/StrictHostKeyChecking.*/StrictHostKeyChecking no/ /etc/ssh/ssh_config
# 安装sshpass(如果尚未安装)
rpm -q sshpass &> /dev/null || yum -y install sshpass &> /dev/null
# 循环遍历网络中的所有IP地址
for i in {1..254} ; do
sshpass -p $PASSWORD ssh-copy-id -i ${USER[0]}@${NET}.${i} &> /dev/null
done
# 等待所有后台进程完成
wait
```
这个脚本会尝试连接`172.20.200.1`至`172.20.200.254`之间的所有IP地址,并使用指定的用户名和密码将公钥发送过去。
#### 调用`expect`命令
`expect`是一个Tcl扩展,专门用于自动化与交互式程序的通信,如SSH。它允许脚本发送输入、等待预期的输出,然后继续执行。以下是使用`expect`的示例脚本(`ssh-expect.sh`):
```bash
#!binbash
NET=172.20.200
USER=(root hechunping)
PASSWORD=123456
# 生成SSH公钥
ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &> /dev/null
# 循环遍历网络中的所有IP地址
for i in {1..254} ; do
expect <
全部评论 (0)


