You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu新用户SSH公钥认证失败(Permission denied (publickey))及GitHub Actions部署配置问题求助

Ubuntu新用户SSH公钥认证失败(Permission denied (publickey))及GitHub Actions部署配置问题求助

看起来你在给新用户配置SSH公钥认证、准备GitHub Actions自动部署时遇到了挺头疼的权限问题,我结合你给出的操作步骤和服务器配置,梳理几个关键排查点和解决方案:

1. 最关键的SSH服务配置限制:AllowUsers 列表遗漏新用户

看你贴出的Ubuntu服务器sshd_config里有一行:

AllowUsers spiderman

但你尝试登录的新用户是githubdeployment(从verbose日志里的Authenticating to XXX.XXX.XX.XXX:22 as 'githubdeployment'能看到),这个用户不在AllowUsers的允许列表里,SSH服务会直接拒绝其登录请求!

解决步骤

  • 用你能正常登录的管理员用户(比如spiderman)登录服务器,编辑/etc/ssh/sshd_config,把新用户添加到AllowUsers里:
    sudo nano /etc/ssh/sshd_config
    
    修改为:
    AllowUsers spiderman githubdeployment
    
  • 重启SSH服务生效:
    sudo systemctl restart sshd
    

2. 新用户.ssh目录及文件的权限/所有者必须严格匹配

公钥认证对权限要求非常严格,哪怕权限宽一点都会被拒绝。你提到复制了老用户的密钥,但要确保:

  • .ssh目录权限为700,且所有者是新用户:
    sudo chmod 700 /home/githubdeployment/.ssh
    sudo chown -R githubdeployment:githubdeployment /home/githubdeployment/.ssh
    
  • authorized_keys文件权限为600
    sudo chmod 600 /home/githubdeployment/.ssh/authorized_keys
    
  • 本地Mac上的私钥文件(比如UW1003.pem)权限也要设为600,避免SSH因为权限过宽拒绝使用:
    chmod 600 /Users/hs/.ssh/UW1003.pem
    

3. 本地SSH配置的一致性检查

从verbose日志看,你执行的是ssh UW1003,但你贴出的~/.ssh/config里配置的是Host SpiderServer,这里可能存在配置混淆。确保你的config配置和实际使用的Host名对应:

Host UW1003
  HostName ip-address-of-the-server
  Port 22
  User githubdeployment
  IdentityFile /Users/hs/.ssh/UW1003.pem

4. 更可靠的公钥上传方式

手动用cat追加公钥到authorized_keys容易出现格式错误(比如多余换行、字符截断),建议用ssh-copy-id工具自动上传公钥(如果能临时开启密码登录的话):

  • 先在服务器sshd_config里临时开启PasswordAuthentication yes,重启SSH服务
  • 本地执行:
    ssh-copy-id -i /Users/hs/.ssh/UW1003.pem githubdeployment@XXX.XXX.XX.XXX
    
  • 成功后再把PasswordAuthentication改回no,重启SSH服务

5. GitHub Actions部署的前置准备(解决SSH登录问题后)

等新用户能正常SSH登录后,配置GitHub Actions部署还需要:

  • 在GitHub仓库的「Settings → Secrets and variables → Actions」里添加服务器私钥(比如命名为SSH_PRIVATE_KEY)、服务器IP、用户名等机密信息
  • 在Workflow文件(.github/workflows/deploy.yml)里使用SSH action,比如appleboy/ssh-action,示例片段:
    - name: Deploy to Server
      uses: appleboy/ssh-action@v1.0.3
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USERNAME }}
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          # 这里写你的部署命令,比如拉取代码、重启服务等
          cd /path/to/your/project
          git pull origin your-branch
          sudo systemctl restart your-service
    
  • 确保新用户githubdeployment对部署目录有读写权限,或者配置合适的sudo免密权限(如果部署需要sudo操作)

备注:内容来源于stack exchange,提问作者Harry

火山引擎 最新活动