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_configAllowUsers spiderman githubdeployment - 重启SSH服务生效:
sudo systemctl restart sshd
2. 新用户.ssh目录及文件的权限/所有者必须严格匹配
公钥认证对权限要求非常严格,哪怕权限宽一点都会被拒绝。你提到复制了老用户的密钥,但要确保:
.ssh目录权限为700,且所有者是新用户:sudo chmod 700 /home/githubdeployment/.ssh sudo chown -R githubdeployment:githubdeployment /home/githubdeployment/.sshauthorized_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




