配置多个SSH key 和 Permission denied (publickey) 的解决办法

本文介绍了如何配置多个SSH key,包括为每个key指定匹配的域名和私钥路径。同时,针对遇到的'Permission denied (publickey)'错误,解决方案是将IdentityFile路径设置为绝对路径。在完成配置后,虽然gitee首次git clone时可能需要输入用户名和密码,但此后即可正常拉取代码而无需再次认证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置多个SSH key 和 Permission denied publickey 的解决办法

配置多个SSH key

  • 生成不同名称的 key:
    • 在这里插入图片描述
  • 配置各个 key 匹配的域名和私钥的位置:
    • # gitee
      Host gitee.com
      HostName gitee.com
      PreferredAuthentications publickey
      IdentityFile C:\Users\casstime\.ssh\id_rsa_qq
      # github
      Host github.com
      HostName github.com
      PreferredAuthentications publickey
      IdentityFile C:\Users\casstime\.ssh\id_rsa
      
      

Permission denied (publickey)

  • 博主把 IdentityFile 的路径改为绝对路径之后,这个问题就解决了

奇怪的问题

  • 完成以上配置(config文件)之后,gitee 第一次 git clone 硬是需要输入用户名和密码。
  • 不过只要输入一次用户名和密码之后,即使切换到其他目录执行 git clone ,也可以正常拉取代码
在使用SSH生成密钥或连接远程服务器时遇到 `Permission denied (publickey)` 错误,通常涉及SSH密钥配置、权限设置或服务器端配置的问题。以下是对该问题的详细分析与解决方法: ### 1. 检查SSH密钥路径权限 SSH客户端默认会在 `~/.ssh/` 目录下查找密钥文件,如 `id_rsa` 或 `id_ed25519`。如果密钥文件不存在、权限设置不正确,或者路径未被正确识别,就可能导致连接失败。 - 确保密钥文件的权限设置正确: ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub ``` 如果权限过于宽松,SSH客户端会拒绝使用该密钥,从而导致 `Permission denied (publickey)` 错误[^1]。 ### 2. 使用正确的密钥文件 有时SSH客户端可能没有使用你期望的密钥文件。可以通过以下命令指定密钥文件进行连接: ```bash ssh -i ~/.ssh/id_rsa user@hostname ``` 此外,可以使用 `ssh-add` 命令将密钥添加到SSH代理中: ```bash eval $(ssh-agent) ssh-add ~/.ssh/id_rsa ``` 这有助于避免每次连接时都需要手动指定密钥文件。 ### 3. 配置SSH客户端 在 `~/.ssh/config` 文件中添加特定主机的配置信息,可以明确指定使用的密钥文件: ```bash Host example.com IdentityFile ~/.ssh/id_rsa User your_username ``` 这样可以确保在连接特定主机时使用正确的密钥用户名。 ### 4. 检查服务器端SSH配置 服务器端的SSH配置也可能导致密钥认证失败。需要确认 `/etc/ssh/sshd_config` 文件中包含以下配置: ```bash PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 ``` 修改配置后,重启SSH服务以应用更改: ```bash sudo systemctl restart sshd ``` 此外,检查用户主目录下的 `.ssh/authorized_keys` 文件是否存在且权限正确: ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` 如果该文件内容为空或缺失,需要将本地的公钥内容添加进去。 ### 5. 使用详细日志排查问题 运行带有 `-v` 参数的SSH命令可以获取更详细的连接日志,帮助定位问题: ```bash ssh -v user@hostname ``` 日志中会显示密钥加载情况、认证方式尝试等信息,便于排查具体原因。 ### 6. Windows系统下的SSH配置 在Windows系统中使用OpenSSH客户端时,需确保 `.ssh` 目录密钥文件位于用户目录下(如 `C:\Users\YourName\.ssh\`)。同时,Windows的文件权限管理较为严格,应确保只有当前用户有读写权限,其他用户权限被禁用。 可以通过以下命令检查SSH代理状态: ```powershell Get-Service ssh-agent ``` 若服务未运行,启动它: ```powershell Start-Service ssh-agent ``` ### 7. 重新生成SSH密钥 如果上述方法均无效,可以尝试重新生成SSH密钥对: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 生成密钥后,将公钥内容添加到远程服务器的 `~/.ssh/authorized_keys` 文件中。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值