介绍
基本信息
作者:朱明宇
名称:批量实现其他多台电脑可以免密码 SSH 本电脑
作用:批量将其他多台电脑的公钥拷贝给本电脑
使用方法
1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本
脚本分割线里的变量
1. nm=192.168.4.0 #网段,网段必须为 C 类网段,请保证格式和前 3 个网络位一定正确
2. sip=51 #起始 ip,起始 IP 地址,IP 地址 的范围是 0-255
3. lip=51 #结束 ip ,结束 IP 地址,IP 地址 的范围是 0-255
4. pd=123456 #其他服务器的 root 远程登录密码
5. lpd=Taren1 #本机的 root 远程登录密码
6. lh=192.168.4.254 #本机 IP 地址
注意
1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 必须以 root 用户执行本脚本
脚本
#!/bin/bash
####################### Separator ########################
nm=192.168.4.0 #Network segment. The network segment must be a class C network segment. Please ensure that the format and the first three network bits are correct
sip=51 #Starting IP, starting IP address. The range of IP address is 0-255
lip=51 #End IP, end IP address. The range of IP address is 0-255
pd=123456 #Root remote login password of other servers
lpd=Taren1 #Root remote login password of this machine
lh=192.168.4.254 #Native IP address
####################### Separator ########################
fnm=${nm%.*}
set timeout 3
rpm -q expect
if [ $? -ne 0 ];then
yum -y install expect &> /dev/null
fi
for i in `seq $sip $lip`
do
expect << EOF
spawn ssh root@$fnm.$i
expect "(yes/no)?" {send "yes\r" }
expect "password:" {send "$pd\r" }
expect "#" {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):" {send "\r"}
expect "(empty for no passphrase):" {send "\r"}
expect "passphrase again:" {send "\r"}
expect "#" {send "\r"}
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "password:" {send "$pd\r" }
expect "#" {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):" {send "\r"}
expect "(empty for no passphrase):" {send "\r"}
expect "passphrase again:" {send "\r"}
expect "#" {send "\r"}
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "(yes/no)?" {send "yes\r" }
expect "#" {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):" {send "\r"}
expect "(empty for no passphrase):" {send "\r"}
expect "passphrase again:" {send "\r"}
expect "#" {send "\r"}
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "#" {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):" {send "\r"}
expect "(empty for no passphrase):" {send "\r"}
expect "passphrase again:" {send "\r"}
expect "#" {send "\r"}
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "password:" { send "$pd\r" }
expect "#" { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "(yes/no)?" { send "yes\r" }
expect "root@$lh's password:" { send "$lpd\r" }
expect "#" { send "exit\r" }
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "password:" { send "$pd\r" }
expect "#" { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "root@$lh's password:" { send "$lpd\r" }
expect "#" { send "exit\r" }
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "#" { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "(yes/no)?" { send "yes\r" }
expect "root@$lh's password:" { send "$lpd\r" }
expect "#" { send "exit\r" }
EOF
expect << EOF
spawn ssh root@$fnm.$i
expect "#" { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "root@$lh's password:" { send "$lpd\r" }
expect "#" { send "exit\r" }
EOF
echo "$fnm.$i has been finished"
done