1. 程式人生 > >SSH祕鑰分發、檔案分發、批量執行命令

SSH祕鑰分發、檔案分發、批量執行命令

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
  1. 首先確保aaa-服務端可以ping通bbb客戶端與ccc客戶端
[[email protected] ~]# 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
[[email protected] ~]# 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
[
[email protected]
~]#
  1. 將aaa服務端的公鑰發給bbb客戶端與ccc客戶端確保可以祕鑰登陸
  • 以下均在aaa服務端執行
//生成lss使用者的祕鑰
[[email protected] .ssh]$ ssh-keygen -t rsa -C lss

//將公鑰分發到bbb客戶端
[[email protected] .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]168.1.5
//將公鑰分發到ccc客戶端
[[email protected]
.ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
  1. 執行指令碼實現檔案分發、批量執行命令
  • 建立批量執行命令的指令碼
[[email protected] 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 [email protected]$IP."$i" -p"$Port" "$Command"
done


  • 在bbb客戶端與ccc客戶端批量執行ls命令
[[email protected] 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
[[email protected] 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 [email protected]$IP."$i":$DirFile
done

  • 將aaa服務端的檔案ssh-command.sh批量分發到bbb客戶端與ccc客戶端
[[email protected] 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    
[[email protected] command-file]$