shell中的expect实现远程登录或者传文件
·
场景为:
一台主机上执行脚本,修改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
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)