需求:通过脚本自动化部署(自动远程登录、远程复制本地资源到服务器,远程执行部署相关命令。)
单节点ssh到各个远程主机上去执行命令,可以省去依次登录的麻烦。
方案:SSH执行远程命令
SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。SSH可以在用户和远程主机之间,建立命令和数据的传输通道,因此很多事情都可以通过SSH来完成。
ssh远程执行命令格式:
ssh [options] [user@]host [command]
[root@localhost ~]# ssh root@192.168.59.223 "cd /opt; sh /root/pginstall.sh"
#远程服务器执行本地脚本文件
[root@localhost ~]# ssh root@192.168.59.236 'bash -s'< /root/pginstall.sh
#!/bin/bash
#变量定义
ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3")
user="test1"
remote_cmd="/home/test/1.sh"
#本地通过ssh执行远程服务器的脚本
for ip in ${ip_array[*]}
do
if [ $ip = "192.168.1.1" ]; then
port="7777"
else
port="22"
fi
ssh -t -p $port $user@$ip "remote_cmd"
done
在远程主机上执行操作
ssh -o StrictHostKeyChecking=no 14 " cd /home/SpringbootPro/haitumanage && /usr/local/btjdk/jdk8/bin/jar -xvf /home/SpringbootPro/haitumanage/haitumanage.war"
#将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录。
cd && tar czv src | ssh user@host 'tar xz'
#将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
ssh user@host 'tar cz src' | tar xzv
使用ssh或者scp时指定密码
使用了sshpass命令来自动提供SSH密码,避免了手动输入密码的需要。考虑更安全的方法,比如使用SSH密钥进行认证。
[root@localhost ~]# cat 2.sh
#yum -y install sshpass
#!/bin/bash
# 确保脚本在遇到错误时终止执行
set -e
yum -y install sshpass
# 定义远程服务器的用户名和IP地址
REMOTE_USER="root"
REMOTE_HOST="192.168.59.236"
# 要执行的远程命令
REMOTE_COMMAND="ls -la"
# 如果你需要执行多个命令,可以使用分号将它们隔开:
#ssh user@remote_host 'command1; command2'
#需要执行本地脚本文件,可以使用以下命令
#ssh user@remote_host 'bash -s' < local_script.sh
# 使用sshpass执行SSH命令,需要提前安装sshpass
sshpass -p '123123' ssh -o StrictHostKeyChecking=no $REMOTE_USER@$REMOTE_HOST $REMOTE_COMMAND
# 脚本执行完毕,退出状态为0
exit 0
用expect写脚本模拟交互操作
[root@localhost ~]# cat 3.sh
#!/usr/bin/expect -f
spawn scp -r 3.sh root@192.168.59.236:/opt/
expect "*password:"
send "123123\r"
expect eof
#windows可以创建wscript vbscript来模拟交互操作。