需要用脚本在 ssh 远程服务器上执行命令,但是要执行的命令需要管理员权限,由于本地不能直接远程 root 用户,但是可以 ssh 到普通用户然后切换到 root 用户,不使用 ansible 也不用 expect 可以这样实现:
要执行命令的远程服务器:server1 , server2 , server3
先 修改 ./ssh/config 配置文件管理 ssh 连接(已免密)
HOST server1
HostName 192.168.1.31
User clouverd
Port 37101
HOST server2
HostName 192.168.1.32
User clouverd
Port 37102
HOST server3
......
任务:在以上远程服务器上安装一个 rpm 包的脚本:
# 文件名 Start.sh
#!/bin/bash
list=("server1" "server2" "server3" )
for i in ${list[@]}; do
# 将用到文件复制到远程服务器
scp python36-psutil-5.6.7-1.el7.x86_64.rpm $i:
scp Install-psutil.sh $i:
# ssh远程连接服务器并强制分配伪终端,然后执行后续命令
ssh -t -t $i <<EOF
#!/bin/bash
echo "Install..."
./Install-psutil.sh
rm -rf /home/clouverd/python36-psutil-5.6.7-1.el7.x86_64.rpm Install-psutil.sh
# 退出伪终端
exit 2
EOF
done
# 文件名 Install.sh
#!/bin/bash
password="clouverd@0371"
# su -c commond 命令为变更账户为超级用户,并在执行命令后还原使用者。
echo "$password"| su -c "yum -y install python36-psutil-5.6.7-1.el7.x86_64.rpm;pip3 list"