使用shell脚本实现在ssh连接的服务器上执行命令

620 阅读1分钟

需要用脚本在 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"