解决Git@github.com: Permission denied (publickey).的问题指导

1. 背景使用Pycharm 工具对 github平台上的代码clone下来时,提示权限被拒绝(Permission denied ),导致无法clone和pull最新的代码

2. 原因

   是由于个人github 平台没有添加公钥,需要进一步添加密钥 

3. 解决思路

   本地生成公钥和密钥

   登录GitHub配置公钥

4. 具体步骤

步骤一: 生成密钥、公钥

windows、Linux、mac 平台时,右键桌面打开 git bash ,输入指令:ssh-keygen -t rsa -C "xxx@qq.com"  ==> 输入你github平台绑定的邮箱地址

步骤二:直接敲三次回车键后,即可在本地生成密钥、公钥  (生成如下样式即可)

 步骤三:复制上步骤生成的公钥,地址为: /c/Users/Administrator/.ssh/id_rsa.pub

 步骤四: 登录GitHub平台,点击右上角个人中心后,下拉点击setting,切换SSH 按到 GPG Keys ,再点击new SSh key ,输入title + 复制的公钥(粘贴时注意把最后的空格去掉)

 步骤五:再次进入pycharm 进行 clone 或 pull 代码

 

<think>好的,我现在需要解决GitLab Runner在使用rsync部署时出现的权限拒绝问题,具体是publickey认证失败。首先,我得理清楚可能的原因和解决方法。根据用户提供的引用,提到了将私钥转换为pem格式的命令,这可能和密钥格式有关。 首先想到的是SSH认证的问题publickey认证失败通常意味着服务器拒绝了提供的私钥。可能的原因包括: 1. **私钥格式问题**:GitLab Runner可能不支持OpenSSH的新格式私钥,需要转换为旧的PEM格式。用户提供的命令`ssh-keygen -p -f ~/.ssh/id_rsa -m pem`就是用来转换的,这一步很关键。 2. **权限设置不正确**:SSH对文件和目录的权限非常严格。例如,私钥文件的权限应该是600,.ssh目录是700,用户主目录不能有写权限给其他用户。 3. **SSH配置问题**:可能在目标服务器上的sshd配置中禁用了公钥认证,或者配置了其他限制,比如AllowUsers、PermitRootLogin等。 4. **GitLab Runner的执行环境问题**:Runner可能没有访问正确私钥的权限,尤其是在使用Docker executor时,需要确保密钥被正确挂载到容器中。 5. **用户或路径问题**:rsync命令中使用的用户是否有权限访问目标目录?路径是否正确? 接下来,我需要逐步验证这些可能性。首先检查私钥格式,确保其为PEM。然后检查权限设置是否正确。接着查看目标服务器的SSH日志(如/var/log/auth.log),确认失败的具体原因。同时,确保GitLab Runner的执行环境正确加载了私钥,并且使用正确的用户和路径。 可能还需要测试手动使用rsync命令,模拟Runner的执行环境,看看是否能成功。如果手动可以,但Runner不行,可能是环境变量或路径的问题。另外,检查sshd_config中的PubkeyAuthentication是否设为yes,以及是否有其他限制。 总结下来,步骤可能包括转换私钥格式、调整权限、验证SSH配置、确保Runner正确使用密钥。此外,可能还需要配置SSH客户端选项,比如在~/.ssh/config中指定密钥文件,或禁用其他认证方法,强制使用公钥认证。</think>要解决GitLab Runner执行`rsync`时出现的`Permission denied (publickey)`错误,可按照以下步骤排查和修复: --- ### 1. **确认私钥格式是否为PEM** GitLab Runner可能无法识别新版OpenSSH的私钥格式(如以`-----BEGIN OPENSSH PRIVATE KEY-----`开头)。需将私钥转换为PEM格式: ```bash ssh-keygen -p -f ~/.ssh/id_rsa -m pem ``` 完成后,确保Runner使用的私钥路径与此一致[^1]。 --- ### 2. **检查文件与目录权限** SSH对权限敏感,需严格设置: - 私钥文件权限为`600`: ```bash chmod 600 ~/.ssh/id_rsa ``` - `.ssh`目录权限为`700`: ```bash chmod 700 ~/.ssh ``` - 用户主目录权限不应过宽(如`755`而非`777`)。 --- ### 3. **验证SSH连接配置** 在Runner的SSH配置中强制指定私钥和用户: 1. 创建或编辑`~/.ssh/config`: ``` Host target-server HostName your-server-ip User gitlab-runner IdentityFile ~/.ssh/id_rsa PubkeyAuthentication yes PreferredAuthentications publickey ``` 2. 测试连接: ```bash ssh -Tv gitlab-runner@your-server-ip ``` --- ### 4. **调整目标服务器的SSH配置** 检查目标服务器的`/etc/ssh/sshd_config`: ```bash PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # 禁用密码认证,避免干扰 ``` 重启SSH服务: ```bash systemctl restart sshd ``` --- ### 5. **确保GitLab Runner环境正确加载私钥** - **Shell Executor**:确认Runner用户(如`gitlab-runner`)的`$HOME/.ssh`包含正确密钥。 - **Docker Executor**:在`gitlab-ci.yml`中挂载私钥: ```yaml variables: SSH_DIR: "/root/.ssh" before_script: - mkdir -p $SSH_DIR - echo "$SSH_PRIVATE_KEY" > $SSH_DIR/id_rsa - chmod 600 $SSH_DIR/id_rsa ``` 通过CI/CD变量`SSH_PRIVATE_KEY`传递PEM格式私钥内容。 --- ### 6. **检查rsync命令参数** 在CI脚本中显式指定SSH选项: ```bash rsync -avz -e "ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa" source/ user@host:/path/ ``` --- ### 7. **查看SSH日志定位问题** 在目标服务器查看日志: ```bash tail -f /var/log/auth.log ``` 根据错误提示(如`no mutual signature algorithm`)调整加密算法: ```bash # 在客户端SSH配置中添加: Host * PubkeyAcceptedAlgorithms +ssh-rsa ``` --- ### 总结流程图 ```mermaid graph TD A[Publickey认证失败] --> B{私钥是否为PEM格式?} B -->|是| C{权限设置是否正确?} B -->|否| D[转换私钥为PEM格式] C -->|是| E{SSH配置是否允许公钥?} C -->|否| F[调整权限为600/700] E -->|是| G[检查rsync参数与环境] E -->|否| H[修改sshd_config并重启服务] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值