ssh免密登陆
背景:最近需要对多台服务器做环境的初始化,手动一台一台操作,太花时间,觉得用shell 完成这些重复性的工作
免密登陆,操作服务器
前提:系统含有ssh 生成的公钥
实现内容:
1、通过expect 监听命令,并对含有关键字的输出作出对应的响应。
2、通过ssh-copy-id 把系统中的公钥拷贝到目标系统中,从而使系统可以不用输入密码就能登陆目标系统。
3、为了避免已经上传过公钥的的目标服务器重复上传,通过判断~/.ssh/known_hosts文件是否含有目标服务器ip即可。
4、通过ssh 登陆服务器后可以在两个eeooff之间编写操作服务器的脚本
文件shell1.sh
#!/bin/bash
user=$1
ip=$2
password=$3
if [ `grep -c $ip ~/.ssh/known_hosts` -eq 0 ];then
echo ssh-copy-id start!
expect << EOF
spawn ssh-copy-id $user@$ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" }
}
expect eof
EOF
fi
ssh $user@$ip > /dev/null 2>&1 << eeooff
#对服务器进行各种操作
eeooff
echo done!
读取文件
目的:由于服务器过多,需要通过读取配置文件来做批量的操作
前提:配合免密登陆和ssh
实现内容:按行读取文件,对$1通过,进行字符串的截取作为参数执行参数$2,中的shell
文件格式实例:user,ip,password,shell1.sh
文件shell2.sh
#/bin/bash
filepath=$1
shell_sh=$2
cat $filepath | while read line
do
echo $line start!
params=(`echo $line | tr ',' ' '` )
sh $shell_sh ${params[0]} ${params[1]} ${params[2]}
done
注:shell 脚本使用的时候,配置文件,shell1.sh和shell.sh 放在同一个目录下即可