linux服务器之间免密登录

服务器之间免密登录

一、简便方法

1、所有服务器执行

mkdir -p  /root/.ssh
cd /root/.ssh
ssh-keygen -t rsa 
chmod 700 /root/.ssh

2、将本机的公钥拷贝到其他机器上

输入yes

输入对方服务器密码

192.168.56.101

ssh-copy-id [email protected]

二、让服务器A实现免密登录自己

1、在A服务器中指定的位置(/root/.ssh)生成私钥id_rsa和公钥id_rsa.pub;
在服务器A操作

mkdir -p  /root/.ssh
cd /root/.ssh
ssh-keygen -t rsa


cat id_rsa.pub >> authorized_keys


scp id_rsa.pub [email protected]:/tmp

ssh [email protected]

mkdir -p /root/.ssh
cd /root/.ssh
cat /tmp/id_rsa.pub >> authorized_keys

2、在B服务器中指定的位置(/root/.ssh)生成私钥id_rsa和公钥id_rsa.pub;
在服务器B操作

mkdir -p  /root/.ssh
cd /root/.ssh
ssh-keygen -t rsa


cat id_rsa.pub >> authorized_keys



scp id_rsa.pub [email protected]:/tmp


ssh [email protected]


mkdir -p /root/.ssh
cd /root/.ssh
cat /tmp/id_rsa.pub >> authorized_keys

三、最终脚本

配置下面的ip 密码
执行下面的脚本

配置需要

在192.168.56.100 执行下面的脚本后,所有配置的都可以互免密了

#设置要登入的节点ip地址

NOW_IP=“192.168.56.100”
所有服务器的ip
HOST_IP_NODE=(“192.168.56.100” “192.168.56.101” “192.168.56.102”)
所有服务器对应的密码
HOST_PASS_NODE=(“123456” “123456” “123456”)

#!/bin/sh

CURRENT_DIR=$(
   cd "$(dirname "$0")"
   pwd
)

#///
# 使用方法
# 配置下面的NOW_IP HOST_IP_NODE  HOST_PASS_NODE
# 执行该脚本,然后登录测试一下即可
#---------------设置ssh免密登入对台设备---------------#
# 设置要登入的节点ip地址
# 当前执行脚本服务器的ip
NOW_IP="192.168.56.100"
# 所有服务器的ip
HOST_IP_NODE=("192.168.56.100" "192.168.56.101" "192.168.56.102")
# 所有服务器对应的密码
HOST_PASS_NODE=("123456" "123456" "123456")

sed -i -e "s/StrictHostKeyChecking/#StrictHostKeyChecking/g" /etc/ssh/ssh_config

#本机ip
native_ip=$(ip addr | awk '/^[0-9]+: / {
     
     }; /inet.*global/ {
     
     print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}'|awk 'NR==1')
echo "【本机ip】$native_ip"

#安装expect软件包
# yum install expect -y

# 下载离线rpm yumdownloader --resolve expect
rpm -Uvh --force --nodeps *.rpm
expect << EOF
set timeout 5
spawn ssh-keygen -t rsa
expect "id_rsa):" 
send "\r" 
expect "passphrase):" 
send "\r"
expect "again:"
send "\r" 
expect eof
EOF
 
copy_id(){
expect << EOF
set timeout 5
spawn ssh-copy-id $1
expect "(yes/no)?" 
send "yes\r"
expect "password:" 
send "$2\r" 
expect eof
EOF
}

 
#循环遍历
num=${#HOST_IP_NODE[*]}
fun(){
	for((i=0;i<$num;i++));
      do
		if [ ${HOST_IP_NODE[i]} == $native_ip ]
	    then
			echo "本机不做操作"
	    else
	        copy_id root@${HOST_IP_NODE[i]} ${HOST_PASS_NODE[i]}
			if [ $NOW_IP == $native_ip ]
			then
				echo "$native_ip 远程操作 "
				echo "ssh ${HOST_IP_NODE[i]} \"rm -rf /root/sshNoPwd\""
				ssh ${HOST_IP_NODE[i]} "rm -rf /root/sshNoPwd"
				scp -r $CURRENT_DIR root@${HOST_IP_NODE[i]}:/root
ssh ${HOST_IP_NODE[i]} 'bash -s' <<'ENDSSH'
chmod +x /root/sshNoPwd/sshNoPwd.sh
cd /root/sshNoPwd
./sshNoPwd.sh
ENDSSH
			fi
	    fi
      done

}
fun

参考地址: https://blog.csdn.net/qq_36120342/article/details/127648709

猜你喜欢

转载自blog.csdn.net/weixin_43882515/article/details/128564313