1、在每台服务器上都执行ssh-keygen -t rsa生成密钥对:
#ssh-keygen -t rsa
2、在每台服务器上生成密钥对后,将公钥复制到需要无密码登陆的服务器上:
举例如192.168.16.240,192.168.16.241,192.168.16.242这三台服务器需要做相互免密码登陆,在每台服务器生成密钥对后,在每台服务器上执行ssh-copy-id命令(具体说明及用法见最后附录),将公钥复制到其它两台服务器上(此处以192.168.16.240为例,用户为hadoop,其它两台步骤相同)
#ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@192.168.16.241
#ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@192.168.16.242
以上命令,可以自动将公钥添加到名为authorized_keys的文件中,在每台服务器都执行完以上步骤后就可以实现多台服务器相互无密码登陆了
附ssh-copy-id介绍及用法:
Linux系统里缺省都包含一个名为ssh-copy-id的工具:
# type ssh-copy-id
ssh-copy-id is /usr/bin/ssh-copy-id
你用cat或者more命令看一下就知道ssh-copy-id本身其实就是一个shell脚本,用法很简单:
# ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
再也不用记如何拼写authorized_keys这个文件名了,是不是很爽,可惜别高兴太早了,ssh-copy-id有一个很要命的问题,那就是缺省它仅仅支持SSH运行在22端口的情况,不过实际上出于安全的需要,我们往往都会更改服务器的SSH端口,比如说改成10022端口,这时候你运行ssh-copy-id就会报错了,直接修改ssh-copy-id脚本当然可以修正这个问题,但是那样显得太生硬了,实际上还有更好的办法:
# vi ~/.ssh/config
加上内容:
Host server
Hostname ip
Port 10022
你也可以单独只加入Port一行配置,那样就是一个全局配置,保存后再运行ssh-copy-id命令就不会报错了。
补充:经网友提示,如果端口不是22,不修改config文件,按如下方式也可以:
ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 10022 user@server”
以下是在网络中收集的资料,用于配置多台机器:
当需要配置的机器有很多台时,可以使用脚本批量完成配置:
下面的脚本必须满足三个条件才能执行:
1)必须在节点列表{node001, node002, node003}中的一个节点运行
2)必须使用root账户运行脚本
3)nodexxx各节点的/etc/hosts中必须包含如下信息:
10.0.0.8 node001
10.0.0.9 node002
10.0.0.10 node003
#!/bin/bash
node=(node001 node002 node003) # hostname for each node
username=hadoop # username to be interconnected
homename=$username # home dir, i.e. home/zhangyang
if [ "$username" = "root" ];
then
homename=root
else
homename=home/$username
fi
for((i=0; i<${#node[*]}; i++))
do
ssh $username@${node[i]} 'ssh-keygen -t rsa; chmod 755 ~/.ssh'
done
#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
echo "batch authorized_keys created..."
echo "start scp..."
#scp node003:/$homename/.ssh/authorized_keys /$homename/.ssh/node003.key
for((i=0; i<${#node[*]}; i++))
do
scp ${node[i]}:/$homename/.ssh/id_rsa.pub /$homename/.ssh/${node[i]}.key
echo "scp from ${node[i]} finished..."
done
echo "append key to authorized_keys..."
for((i=0; i<${#node[*]}; i++))
do
cat /$homename/.ssh/${node[i]}.key >> /$homename/.ssh/authorized_keys
echo "append ${node[i]}.key finished..."
done
echo "append all key finished..."
loop=${#node[*]}
let subloop=loop-1
echo "starting scp complete authorized_keys to ${node[1]}~${node[subloop]}"
for((i=1; i<${#node[*]}; i++))
do
scp /$homename/.ssh/authorized_keys ${node[i]}:/$homename/.ssh/authorized_keys
echo "scp to ${node[i]} finished..."
done
echo "scp all nodes finished..."
# delete intermediate files
rm -rf /$homename/.ssh/*.key
echo "all configuration finished..."
分享到:
相关推荐
多台linux服务器相互无密码访问,又需要的可以打开看看
hadoop集群服务器节点之间,无密码登录!!服务器本节点hostname无密码登录。
服务器Centos集群上实现ssh无密码相互访问,解决bash scp command not found问题
ssh无密码登录,关键的是设置权限,防火墙的关闭
ssh的相互无密码访问
python使用ssh实时得监多台服务器信息,能做到及时预防得效果,不至于那台服务器宕机了还要排查一下
linux下怎样设置ssh无密码登录.docx
在linux上实现几台机ssh无密码相互登录
centos下批量实现多台服务器之间的ssh无密码登录的信任关系
关于ssh加密访问服务器,保证服务器的安全
连接Linux服务器工具SSH 3.2.9 方便快捷!
每次登录测试服务器,ssh登录总是需要输入密码。登录的少还行,登录的多了,多一行命令都是多余的。 rsa认证登录方式 制作密钥对 在客户端(本地机器)终端下输入以下命令 ssh-keygen -t [rsa|dsa] rsa和dsa代表...
针对两台服务器下的postgres数据库之间,实现无密码互相登录
ssh免密码;ssh免密码;ssh免密码;ssh免密码;ssh免密码;
批量实现多台服务器之间ssh无密码登录的相互信任关系 主要是分为三大块:believe.sh ,sshcopy.exp ,sshkeygen.exp 。 运行环境:本地需要先安装好expect ,believe.sh ,sshcopy.exp ,sshkeygen.exp 三个文件都要具有...
ssh无密码手顺设置.docx
通过配置SSH服务实现服务器间无需密码即可相互登陆
LINUX服务器 大多都是使用SSH方式远程访问 这个是专用的SSH工具
SCP 无密码登录 ssh 无密码登录 IPTALE 使用
基于python轻松实现批量ssh工具管理多台linux服务器.docx