SSH秘钥分发、文件分发、批量执行命令
要求使用同一用户lss,实现A机器从本地分发数据到B、C的过程不需要输入密码,且可以批量在B、C主机上执行命令
IP | 角色 | 用户 |
---|---|---|
192.168.1.4 | aaa-服务端 | lss |
192.168.1.5 | bbb-客户端 | lss |
192.168.1.6 | ccc-客户端 | lss |
- 首先确保aaa-服务端可以ping通bbb客户端与ccc客户端
[root@aaa-server ~]# ping bbb-server
PING bbb-server (192.168.1.5) 56(84) bytes of data.
64 bytes from bbb-server (192.168.1.5): icmp_seq=1 ttl=64 time=1.64 ms
[root@aaa-server ~]# ping ccc-server
PING ccc-server (192.168.1.6) 56(84) bytes of data.
64 bytes from ccc-server (192.168.1.6): icmp_seq=1 ttl=64 time=2.17 ms
[root@aaa-server ~]#
- 将aaa服务端的公钥发给bbb客户端与ccc客户端确保可以秘钥登陆
- 以下均在aaa服务端执行
//生成lss用户的秘钥
[lss@aaa-server .ssh]$ ssh-keygen -t rsa -C lss
//将公钥分发到bbb客户端
[lss@aaa-server .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub lss@192.168.1.5
//将公钥分发到ccc客户端
[lss@aaa-server .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub lss@192.168.1.6
- 执行脚本实现文件分发、批量执行命令
- 创建批量执行命令的脚本
[lss@aaa-server command-file]$ vim ssh-command.sh
#!/bin/bash
if [ $# -ne 1 ];then
echo "USAGE $0:{Please Command}"
exit 1
fi
Command="$1"
IP="192.168.1"
User=lss
Port=22
for i in 5 6
do
echo "###Server IS $IP."$i"###"
/usr/bin/ssh $User@$IP."$i" -p"$Port" "$Command"
done
- 在bbb客户端与ccc客户端批量执行ls命令
[lss@aaa-server command-file]$ sh ssh-command.sh ls
###Server IS 192.168.1.5###
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
###Server IS 192.168.1.6###
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
[lss@aaa-server command-file]$
- 创建文件批量分发脚本
distributeFile.sh
#!/bin/bash
if [ $# -ne 2 ];then
echo "USAGE $0:{LocalFile|RemoteFile}"
exit 1
fi
File1="$1"
DirFile="$2"
IP=192.168.1
User=lss
Port=22
for i in 5 6
do
echo "###Server IS $IP."$i"###"
/usr/bin/scp -rp -P"$Port" $File1 $User@$IP."$i":$DirFile
done
- 将aaa服务端的文件ssh-command.sh批量分发到bbb客户端与ccc客户端
[lss@aaa-server command-file]$ sh distributeFile.sh ssh-command.sh /tmp/
###Server IS 192.168.1.5###
ssh-command.sh 100% 229 0.2KB/s 00:00
###Server IS 192.168.1.6###
ssh-command.sh 100% 229 0.2KB/s 00:00
[lss@aaa-server command-file]$