场景为:
一台主机上执行脚本,修改ip.txt文件中所有主机的/etc/ssh/sshd_config文件内容
涉及的要点为:scp命令的使用,expect命令"或"的使用,expect远程执行脚本的使用
changeme_sshdconfig.sh

#! /bin/bash
CURRENT_PATH=$(cd `dirname $0`; pwd)
LOG_PATH=$CURRENT_PATH/logs/upgrade
echo "please input paas password:"
read -s paaspwd
echo "please input root password:"
read -s rootpwd


function scp_script_to_slave() {
    #定义接收参数
    local ipaddr=$1
    local localfile="Change_sshd.sh"
    local pword=$2
	local rootpwd=$3
    #利用expect自动拷贝文件到远程服务器,两种情况,第一次连接时:生成秘钥,需要输入yes;第二种情况:已生成过秘钥,不需要输入yes
expect <<EOF
    set timeout 1000
    spawn scp ${localfile} paas@${ipaddr}:/home/paas
    expect {
        "(yes/no)?" {
            send "yes\r"
			expect "*word"
            send "${pword}\r"
            }
        "*word:" {
            send "${pword}\r"
            }
         }
    expect "*~" {send "exit\r"}

EOF
}

function execute_for_all_nodes(){
    local ip=$1
    local cmd=$2
	local paaspwd=$3
    local rootpwd=$4
# 远程paas用户登录,切换到root执行命令
expect <<EOF
    set timeout 3
    spawn ssh paas@${ip}
    expect "*word:" {send "${paaspwd}\r"}
    expect "*~" {send "su - root\r"}
    expect "*word:" {send "${rootpwd}\r"}
    expect "*~" {send "${cmd}\r"}
    expect "*~" {send "exit\r"}
    expect "*~" {send "exit\r"}
    expect "*~" {send "exit\r"}
EOF
}

function get_ips() {
    cd $CURRENT_PATH
	remotefile="/home/paas"
	cat ip.txt | while read line
do
	scp_script_to_slave $line $paaspwd $rootpwd
done
}

function execute_cmd() {
    cd $CURRENT_PATH
    cat ip.txt | while read line
do
    execute_for_all_nodes $line "/bin/bash /home/paas/Change_sshd.sh" $paaspwd $rootpwd
done

}

get_ips
execute_cmd

Change_sshd.sh

#! /bin/bash
CURRENT_PATH=$(cd `dirname $0`; pwd)
LOG_PATH=$CURRENT_PATH/logs/upgrade

function change_sshd_config() {
    sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config
    sed -i 's/AllowUsers/AllowUsers root/g' /etc/ssh/sshd_config
    sleep 1
    service sshd restart
    if [ $? -eq 0 ];then
        echo "change sshd_config success!"
    else
        echo "change sshd_config failed!"
    fi
}
change_sshd_config

ip.txt

8.7.81.xx
8.7.81.xx
8.7.81.xx
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐