expect批量免密登录🎯🔐🔑

发布时间 2023-06-07 15:00:20作者: Huluo

expect批量免密登录???


一、准备工作

安装expect

[root@k8s-node02 ~]# yum -y install expect

生成密钥对

[root@k8s-node02 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

二、批量推送密钥

编写shell脚本

[root@k8s-node02 ~]# cat sshpush.sh 
#!/usr/bin/bash

user="root"
passwd='123456'
hosts='k8s-master01 k8s-master02 k8s-master03 k8s-node01'                  (这里已提前做好hosts解析)

for host in $hosts
do
        echo "===============$host================"
        expect <<EOF
        set timeout 3
        spawn ssh-copy-id -f "$user@$host"
        expect {
                "yes/no" { send "yes\n"; exp_continue}
                "password:" { send "$passwd\n"}
        }
        expect off;
EOF
done

执行shell脚本

[root@k8s-node02 ~]# shellcheck sshpush.sh                      (可以先检查shell语法,yum -y install shellcheck)
[root@k8s-node02 ~]# sh sshpush.sh 

输出:

[root@k8s-node02 ~]# sh sshpush.sh 
=========================k8s-master01===============================
spawn ssh-copy-id -f root@k8s-master01
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'k8s-master01 (192.168.0.71)' can't be established.
ED25519 key fingerprint is SHA256:CareY4NnHZfTsByqMH5Gwvcqxx165c6m5FOcN8jRs7E.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@k8s-master01's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@k8s-master01'"
and check to make sure that only the key(s) you wanted were added.

=========================k8s-master02===============================
spawn ssh-copy-id -f root@k8s-master02
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'k8s-master02 (192.168.0.72)' can't be established.
ED25519 key fingerprint is SHA256:CareY4NnHZfTsByqMH5Gwvcqxx165c6m5FOcN8jRs7E.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: k8s-master01
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@k8s-master02's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@k8s-master02'"
and check to make sure that only the key(s) you wanted were added.

=========================k8s-master03===============================
spawn ssh-copy-id -f root@k8s-master03
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'k8s-master03 (192.168.0.73)' can't be established.
ED25519 key fingerprint is SHA256:CareY4NnHZfTsByqMH5Gwvcqxx165c6m5FOcN8jRs7E.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: k8s-master01
    ~/.ssh/known_hosts:4: k8s-master02
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@k8s-master03's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@k8s-master03'"
and check to make sure that only the key(s) you wanted were added.

=========================k8s-node01===============================
spawn ssh-copy-id -f root@k8s-node01
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'k8s-node01 (192.168.0.74)' can't be established.
ED25519 key fingerprint is SHA256:CareY4NnHZfTsByqMH5Gwvcqxx165c6m5FOcN8jRs7E.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: k8s-master01
    ~/.ssh/known_hosts:4: k8s-master02
    ~/.ssh/known_hosts:5: k8s-master03
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@k8s-node01's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@k8s-node01'"
and check to make sure that only the key(s) you wanted were added.

三、验证

[root@k8s-node02 ~]# ssh k8s-master01
Last login: Wed Jun  7 13:59:12 2023 from 192.168.0.75
[root@k8s-master01 ~]# exit
logout
Connection to k8s-master01 closed.