使用SSH执行远程机器上的Shell脚本有多种方法,下面详细介绍几种常用的方式:
# 执行远程服务器上已存在的脚本
ssh username@remote_host '/path/to/script.sh'
# 带参数执行
ssh username@remote_host '/path/to/script.sh arg1 arg2'
# 使用sudo权限执行
ssh username@remote_host 'sudo /path/to/script.sh'
# 将本地脚本传输到远程并执行
ssh username@remote_host 'bash -s' < local_script.sh
# 带参数执行本地脚本
ssh username@remote_host 'bash -s arg1 arg2' < local_script.sh
# 使用cat和ssh组合
cat local_script.sh | ssh username@remote_host 'bash'
# 执行单条命令
ssh username@remote_host 'ls -la /tmp'
# 执行多条命令(用分号分隔)
ssh username@remote_host 'cd /path/to/dir; ./script.sh; pwd'
# 执行复杂的多行命令
ssh username@remote_host << 'EOF'
cd /home/user
./deploy.sh
echo "部署完成"
EOF
ssh username@remote_host << 'ENDSSH'
#!/bin/bash
echo "当前用户: $(whoami)"
echo "当前目录: $(pwd)"
date
ENDSSH
#!/bin/bash
# deploy.sh
REMOTE_USER="deploy"
REMOTE_HOST="192.168.1.100"
SCRIPT_PATH="/home/deploy/deploy.sh"
ssh $REMOTE_USER@$REMOTE_HOST << 'EOF'
cd /home/deploy/app
git pull origin main
npm install
sudo systemctl restart myapp
echo "部署完成 at $(date)"
EOF
#!/bin/bash
# remote_backup.sh
REMOTE_USER="admin"
REMOTE_HOST="server.example.com"
BACKUP_DIR="/backup"
ssh $REMOTE_USER@$REMOTE_HOST "
echo '开始备份...'
tar -czf $BACKUP_DIR/backup-$(date +%Y%m%d).tar.gz /var/www
ls -lh $BACKUP_DIR/
echo '备份完成'
"
#!/bin/bash
# interactive_script.sh
read -p "输入远程主机: " host
read -p "输入用户名: " user
read -p "输入要执行的命令: " command
ssh $user@$host "$command"
# 生成SSH密钥对
ssh-keygen -t rsa
# 复制公钥到远程主机
ssh-copy-id username@remote_host
# 现在可以免密码执行
ssh username@remote_host './script.sh'
# 使用nohup在后台执行
ssh username@remote_host 'nohup /path/to/long_running_script.sh > output.log 2>&1 &'
# 先传输脚本,再执行
scp script.sh username@remote_host:/tmp/
ssh username@remote_host 'chmod +x /tmp/script.sh && /tmp/script.sh'
# 设置环境变量并执行
ssh username@remote_host "export PATH=/usr/local/bin:\$PATH; ./script.sh"
#!/bin/bash
ssh username@remote_host '/path/to/script.sh'
# 检查上一条命令的退出状态
if [ $? -eq 0 ]; then
echo "远程脚本执行成功"
else
echo "远程脚本执行失败"
exit 1
fi
# ~/.ssh/config
Host myserver
HostName 192.168.1.100
User deploy
Port 22
IdentityFile ~/.ssh/id_rsa
# 简化后的执行命令
ssh myserver './deploy.sh'
选择适合你需求的方法,对于简单的命令使用方法1,对于复杂的多行脚本使用方法3或4。