SSH免密码登陆简单流程
1.通过命令ssh-keygen -t rsa在本机生成公钥
运行命令之后一路回车即可
(对私钥设置口令ssh-keygen -t rsa -P '',如果担心私钥的安全,可以设置一个。没有特殊需求直接Enter,为空)
2.通过命令 ssh-copy-id 192.168.1.1 将公钥复制到其他机器
通过Shell脚本自动化对集群实现SSH免密码登陆
init.sh 此脚本在集群中某台机器上执行。(ssh_init.sh放在同级目录)
#!/bin/bash
#将ssh_init.sh复制到远程主机并执行
#集群IP
SERVERS="192.168.8.6 192.168.8.7 192.168.8.8"
#每台远程主机的机器密码
PASSWORD=root
#复制ssh_init.sh到远程主机
ssh_file(){
expect -c "set timeout -1;
spawn scp ssh_init.sh [email protected]$1:/root/
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
#在远程主机上执行ssh_init.sh
execute_sh(){
expect -c "set timeout -1;
spawn ssh [email protected]$SERVER /root/ssh_init.sh
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
#遍历 将ssh复制到远程主机并执行
for SERVER in $SERVERS
do
ssh_file $SERVER $PASSWORD
execute_sh $SERVER $PASSWORD
done
ssh_init.sh
#!/bin/bash
#在本机生成公钥,并copy至其他主机
#集群IP
SERVERS="192.168.8.6 192.168.8.7 192.168.8.8"
#每台远程主机的机器密码
PASSWORD=root
#自动把本地主机的公钥复制到远程主机
auto_ssh_copy_id(){
#expect 人机交互
expect -c "set timeout -1;
#执行命令
spawn ssh-copy-id $1;
expect {
#如果提示yes/no, 输入yes,继续
*(yes/no)* {send -- yes\r;exp_continue;}
#如果提示password, 输入密码回车,继续
*password:* {send -- $2\r;exp_continue;}
#交互结束,退出
eof {exit 0;}
}";
}
#获取ssh公钥
get_rsa(){
expect -c "set timeout -1;
spawn ssh-keygen -t rsa;
expect {
*Enter* {send -- \r;exp_continue;}
eof {exit 0;}
}";
}
get_rsa
#循环遍历所有远程主机,自动把本地主机的公钥复制到远程主机
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
在一台主机执行init.sh脚本即可。(注意执行之前需要给两个脚本增加执行权限)
文章写的比较简单,比如ssh具体流程没有详细记录。此处只是记录大概流程以及自动化脚本。
有问题欢迎大家留言纠错,谢谢。