#!/bin/bash
# 使用方法提示
usage() {
echo "Usage: $0 <local_directory> <remote_directory>"
exit 1
}
# 检查参数数量
if [ "$#" -ne 2 ]; then
usage
fi
# 读取脚本参数
LOCAL_DIR=$1
REMOTE_DIR=$2
REMOTE_USER="admin"
REMOTE_HOST="xxx.xxx.xxx.xxx"
REMOTE_KEY="~/.ssh/LightsailDefaultKey-us-west-2.pem"
# 确保密钥文件的路径是绝对的,并且密钥文件权限是600
REMOTE_KEY_PATH=$(eval echo $REMOTE_KEY)
chmod 600 $REMOTE_KEY_PATH
# 确保本地目录存在
if [ ! -d "$LOCAL_DIR" ]; then
echo "Error: Local directory '$LOCAL_DIR' does not exist."
exit 1
fi
# 更改远程目录的所有者为当前用户
ssh -i $REMOTE_KEY_PATH $REMOTE_USER@$REMOTE_HOST "sudo chown -R $REMOTE_USER $REMOTE_DIR"
# 同步文件到远程目录
rsync -avz -e "ssh -i $REMOTE_KEY_PATH" "$LOCAL_DIR" $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR"
# 将远程目录所有者更改为www-data
ssh -i $REMOTE_KEY_PATH $REMOTE_USER@$REMOTE_HOST "sudo chown -R www-data:www-data $REMOTE_DIR"
# 设置目录权限为755
ssh -i $REMOTE_KEY_PATH $REMOTE_USER@$REMOTE_HOST "sudo find $REMOTE_DIR -type d -exec chmod 755 {} +"
# 设置文件权限为644
ssh -i $REMOTE_KEY_PATH $REMOTE_USER@$REMOTE_HOST "sudo find $REMOTE_DIR -type f -exec chmod 644 {} +"
echo "Deployment completed successfully."
把这段代码保存到文件中,比如叫deploy.sh,然后给这个脚本执行权限:
chmod +x deploy.sh
使用时,只需要执行以下命令:
./deploy.sh /path/to/local/dir /path/to/remote/dir
请确保你的$REMOTE_KEY路径是正确的,并且SSH密钥的权限设置为600。另外,脚本执行ssh和rsync命令时,可能会要求你确认远程主机的指纹或输入密码,除非你已经设置了免密登录。