Update main.yml

This commit is contained in:
镀铬酸钾
2026-01-23 01:13:52 +08:00
committed by GitHub
parent 8be60d7086
commit fe71381073

View File

@@ -15,47 +15,67 @@ on:
jobs:
deploy:
runs-on: ubuntu-latest
environment: SSH-KEY # 确保该环境配置了KEY、PASSPHRASE、SERVER_USER、SERVER_ADDRESS等变量
environment: SSH-KEY
steps:
- uses: actions/checkout@v4
- name: 安装依赖工具
run: |
# 移除sshpass不再使用密码登录),保留expect用于处理密钥密码
# 重新安装sshpass用于处理服务器登录密码)+ expect处理密钥密码
sudo apt-get update
sudo apt-get install -y expect
sudo apt-get install -y sshpass expect
- name: 配置SSH密钥并启动ssh-agent
run: |
# 创建SSH目录并设置正确权限
# 创建SSH目录并设置严格权限SSH要求
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 将GitHub Secrets中的KEY写入私钥文件
# 将GitHub Secrets中的私钥写入文件
echo "${{ secrets.KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa # SSH密钥必须600权限否则会被拒绝
chmod 600 ~/.ssh/id_rsa # 必须600权限否则SSH拒绝使用
# 启动ssh-agent并加载密钥(处理密钥密码)
# 启动ssh-agent并加载带密码的私钥
eval $(ssh-agent -s)
echo "=== 加载SSH密钥调试信息 ==="
echo "当前ssh-agent进程ID: $SSH_AGENT_PID"
# 使用expect自动输入密钥密码PASSPHRASE
expect -c "
set timeout 10
spawn ssh-add ~/.ssh/id_rsa
expect \"Enter passphrase for /home/runner/.ssh/id_rsa:\"
send \"${{ secrets.PASSPHRASE }}\r\"
expect eof
expect {
\"Enter passphrase for /home/runner/.ssh/id_rsa:\" {
send \"${{ secrets.PASSPHRASE }}\r\"
exp_continue
}
\"Identity added: /home/runner/.ssh/id_rsa\" {
puts \"密钥加载成功\"
}
timeout {
puts \"密钥加载超时\"
exit 1
}
eof
}
"
# 查看已加载的密钥(调试用)
ssh-add -l || echo "无已加载的SSH密钥"
# 禁用StrictHostKeyChecking,避免首次连接确认提示
# 禁用主机密钥检查,避免首次连接确认
echo "StrictHostKeyChecking no" >> ~/.ssh/config
echo "UserKnownHostsFile /dev/null" >> ~/.ssh/config
echo "GlobalKnownHostsFile /dev/null" >> ~/.ssh/config
chmod 600 ~/.ssh/config
echo "=== SSH密钥配置完成 ==="
- name: 执行部署
run: |
# 使用SSH密钥登录服务器不再需要sshpass
ssh -p 42422 ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_ADDRESS }} '
# 使用sshpass传递服务器密码 + SSH密钥登录双重认证
sshpass -p "${{ secrets.SERVER_PASSWORD }}" ssh -o StrictHostKeyChecking=no \
-o IdentityFile=~/.ssh/id_rsa -p 42422 ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_ADDRESS }} '
set -ex
echo "=== 部署调试信息开始 ==="
echo "测试sudo权限..."
# 注意这里仍需要服务器用户密码如果sudo需要请确保secrets.SERVER_PASSWORD已配置
echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S whoami
echo "停止服务..."
echo "${{ secrets.SERVER_PASSWORD }}" | sudo -S systemctl stop neobot.service
@@ -71,10 +91,13 @@ jobs:
echo "部署完成!"
echo "=== 部署调试信息结束 ==="
'
continue-on-error: false # 部署失败时直接终止,便于排查问题
continue-on-error: false
- name: 检查部署状态
if: failure()
run: |
echo "部署失败!请检查服务器日志和Actions执行日志。"
echo "部署失败!请检查以下点:"
echo "1. 服务器SSH配置是否允许密钥+密码双重认证"
echo "2. KEY/PASSPHRASE/SERVER_PASSWORD是否正确"
echo "3. 服务器端口42422是否开放用户名/地址是否正确"
exit 1