天天看点

学习大数据之SSH免密登陆以及自动化脚本

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具体流程没有详细记录。此处只是记录大概流程以及自动化脚本。

有问题欢迎大家留言纠错,谢谢。