实现无密登陆的过程:
在执行完ssh-keygen生成密钥,生成之后会在用户的根目录生成一个 “.ssh”的文件夹
文件夹中包含了:
authorized_keys
:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa
: 生成的私钥文件
id_rsa.pub
: 生成的公钥文件
know_hosts
: 已知的主机公钥清单
然后将远程服务器(即要远程登陆的服务器)的公钥(
id_rsa.pub
)拷贝到要登陆的服务器(
authorized_keys
)文件中
我这里给出了copy公钥的脚本
编写脚本:
首先新建文件
sshcopy.sh
#!/usr/bin/expect
set name [lindex $argv 0]
set u_pass "hadoop"
spawn ssh-copy-id -i .ssh/id_rsa.pub root@hdp-server0$name
expect {
"yes/no" { send "yes\n";exp_continue}
"password" { send "$u_pass\n"}
}
expect eof
EOF
写好保存
加上执行权限:
chmod a+rwx sshcopy.sh
最后即可执行:
例如:
./sshcopy.sh 1
代码二:
#!/bin/bash
services="host02 host03"
password=hadoop
auto_ssh()
{
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
"*(yes/no)*" {send yes\r; exp_continue;}
"*(password*)"{send $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy()
{
for service in $services
do
auto_ssh() $service $password
done
}
ssh_copy
写好保存
加上执行权限:
chmod a+rwx sshcopy.sh
最后即可执行:
例如:
./sshcopy.sh
如有错误,希望大家指出,万分感谢!