shell+expect创建多个节点无密码ssh

#!/bin/bash
password="liwanliang"
#1.
echo "为每个节点创建公密钥对..."
for node in node{061..065}
do
    echo "${node}开始操作"
    expect -c "
            set timeout 1
            log_user 0
            spawn ssh root@${node}
            expect {
                    \"*yes/no*\" { send \"yes\r\"; exp_continue }
                    \"*password:*\" { send \"${password}\r\"; exp_continue }
            }
            expect \"\#\"
            send \"ssh-keygen -t rsa -f ~/.ssh/id_rsa -P \'\'\r\"
            expect \"\# \"
            send \"exit\r\"
            log_user 1
    "
    echo "${node}操作成功!"
done

#2. 
echo "拷贝所有节点的公钥到本地的一个文件"

for node in node{061..065}
do
    echo "${node}开始操作"
    expect -c "
        log_user 0
        spawn scp root@${node}:/root/.ssh/id_rsa.pub ./${node}.pub
        expect {
            \"*password:\" { send \"${password}\r\"; exp_continue}
        }
        log_user 1
    "
    echo "${node}操作成功"
done

echo "合并公钥文件..."
cat *.pub >> authorized_keys

echo "分发公钥文件..."

for node in node{061..065}
do
    echo "${node}开始操作"
    expect -c "
        log_user 0
        spawn scp ./authorized_keys root@${node}:/root/.ssh/
        expect {
            \"*password:\" { send \"${password}\r\"; exp_continue}
        }
        spawn ssh root@${node}
        expect \"\# \"
        send \"chmod 600 /root/.ssh/authorized_keys\r\"
        expect \"\# \"
        send \"exit\r\"
        log_user 1
    "
    echo "${node}操作成功"
done

echo "修改authorized_keys权限..."
for node in node{062..065}
do
    echo "${node}开始操作"
    ssh ${node} chmod 600 /root/.ssh/authorized_keys
    echo "${node}操作成功"
done


echo "分发ssh_config文件..."

for node in node{062..065}
do
    echo "${node}开始操作"
    scp /etc/ssh/ssh_config root@${node}:/etc/ssh/ssh_config 
    echo "${node}操作成功"
done

echo "删除pub文件"
rm -rf *.pub authorized_keys

当节点需要取消ssh登陆一些提示信息时,修改/etc/ssh/ssh_config,添加

Host *
    SSAPIAuthentication no
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    LogLevel quiet

上述是让每个节点都创建自己的公私密钥对,属于比较复杂的情况。

如果仅使用同一套,只需要传输.ssh,ssh_config文件就可以了

posted @ 2024-11-02 14:31  liwl1991  阅读(5)  评论(0编辑  收藏  举报