前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 多台主机配置 ssh 互信脚本

Linux 多台主机配置 ssh 互信脚本

作者头像
Lucifer三思而后行
发布2021-09-23 14:35:02
2.1K0
发布2021-09-23 14:35:02
举报
文章被收录于专栏:公众号:Lucifer三思而后行

互信是指配置免密登录另一台主机,常用于自动化脚本!

以下分享个互信脚本:

代码语言:javascript
复制
#!/bin/bash
DEST_USER=$1
PASSWORD=$2
HOSTS_FILE=$3
if [ $# -ne 3 ]; then
    echo "Usage:"
    echo "$0 remoteUser remotePassword hostsFile"
    exit 1
fi

SSH_DIR=~/.ssh
SCRIPT_PREFIX=./tmp
echo ===========================
# 1. prepare  directory .ssh
mkdir $SSH_DIR
chmod 700 $SSH_DIR

# 2. generat ssh key
TMP_SCRIPT=$SCRIPT_PREFIX.sh
{
    echo "#!/usr/bin/expect"
    echo "spawn ssh-keygen -b 1024 -t rsa"
    echo "expect *key*"
    echo "send \r"
} >>$TMP_SCRIPT
if [ -f $SSH_DIR/id_rsa ]; then
    {
        echo "expect *verwrite*"
        echo "send y\r"
    } >>$TMP_SCRIPT
fi
{
    echo "expect *passphrase*"
    echo "send \r"
    echo "expect *again:"
    echo "send \r"
    echo "interact"
} >>$TMP_SCRIPT

chmod +x $TMP_SCRIPT

/usr/bin/expect $TMP_SCRIPT
rm -rf $TMP_SCRIPT

# 3. generat file authorized_keys
cat $SSH_DIR/id_rsa.pub >>$SSH_DIR/authorized_keys

# 4. chmod 600 for file authorized_keys
chmod 600 $SSH_DIR/authorized_keys
echo ===========================
# 5. copy all files to other hosts
for ip in $(>"${HOSTS_FILE}"); do
    if [ "x$ip" != "x" ]; then
        echo -------------------------
        TMP_SCRIPT=${SCRIPT_PREFIX}.$ip.sh
        # check known_hosts
        val=$(ssh-keygen -F $ip)
        if [ "x$val" == "x" ]; then
            echo "$ip not in $SSH_DIR/known_hosts, need to add"
            val=$(ssh-keyscan $ip 2>/dev/null)
            if [ "x$val" == "x" ]; then
                echo "ssh-keyscan $ip failed!"
            else
                echo $val >>$SSH_DIR/known_hosts
            fi
        fi
        echo "copy $SSH_DIR to $ip"

        echo "#!/usr/bin/expect" >$TMP_SCRIPT
        echo "spawn scp -r  $SSH_DIR $DEST_USER@$ip:~/" >>$TMP_SCRIPT
        echo "expect *assword*" >>$TMP_SCRIPT
        echo "send $PASSWORD\r" >>$TMP_SCRIPT
        echo "interact" >>$TMP_SCRIPT

        chmod +x $TMP_SCRIPT
        #echo "/usr/bin/expect $TMP_SCRIPT" >$TMP_SCRIPT.do
        #sh $TMP_SCRIPT.do&

        /usr/bin/expect $TMP_SCRIPT
        rm -rf $TMP_SCRIPT
        echo "copy done."
    fi
done

# 6. date ssh
for ip in $(cat $HOSTS_FILE); do
    if [ "x$ip" != "x" ]; then
        echo "#!/usr/bin/expect" >$TMP_SCRIPT
        echo "spawn ssh $DEST_USER@$ip date" >>$TMP_SCRIPT
        echo "expect *yes*" >>$TMP_SCRIPT
        echo "send yes\r" >>$TMP_SCRIPT
        echo "interact" >>$TMP_SCRIPT

        chmod +x $TMP_SCRIPT
        #echo "/usr/bin/expect $TMP_SCRIPT" >$TMP_SCRIPT.do
        #sh $TMP_SCRIPT.do&

        /usr/bin/expect $TMP_SCRIPT
        rm -rf $TMP_SCRIPT
        echo "copy done."
    fi
done

创建一个脚本 sshtrust.sh,将以上内容写入脚本!

支持多台主机进行互信,创建一个 sshhostList.cfg 文件,将需要配置互信的主机IP写入:

代码语言:javascript
复制
10.211.55.100
10.211.55.101
10.211.55.102

执行如下命令互信:

代码语言:javascript
复制
sh sshtrust.sh 互信用户 互信用户密码 sshhostList.cfg

执行完成后,即配置互信成功!


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档