在部署Hadoop集群时,用下面的命令生成密钥对:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
用下面的命令将master的公钥添加到authorized_keys中。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
用scp命令将authorized_keys文件复制到slave主机。复制的过程中,需要输入密码。首次使用SSH登录Slave主机,需要输入密码,或者需要回答yes/no。
登录以后,会在/root/.ssh/目录下生成known_hosts,并将能够SSH登录主机的主机名、IP、fingerprinter添加到此文件中。有了这些内容,以后SSH远程登录就不需要回答密码或者yes了。
下面的代码实现了脚本自动远程登录,代码放在脚本文件中,如ssh_auto.sh, 给文件添加执行权限,执行脚本即可实现自动远程登录:
#!/usr/bin/expect -f
set loginuser "root"
set password "123456"
set timeout 1
set cmd_prompt "]#|~]?"
set servername "master"
spawn ssh $loginuser@$servername
expect {
"*yes/no/*" {send "yes\r"}; exp_continue
"*password*" {send "$password\r"}; exp_continue
}
send "exit\r"
interact
注意:
在实现自动远程登录以前,需要安装expect,安装命令是:
yum install -y expect
在此脚本中,有四个命令send,expect,spawn,interact,它们的功能如下:
send:用于向进程发送字符串
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互