赞
踩
目录
三、尝试向GitHub推送代码时收到"Permission denied (publickey)"错误
生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen
命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen
命令来生成具有自定义名称的SSH密钥对。
步骤 1: 打开终端
首先,打开我们的终端(或命令提示符)。在Windows上,我们可能需要使用PuTTYgen或者通过Git Bash来执行相似的命令,但这个指南将关注标准的Unix-like环境。
步骤 2: 生成密钥对
接下来,使用以下命令生成一个新的SSH密钥对。这里,
your_custom_name
应该被替换为我们想要用于密钥文件的名称。不要加.pub
或者任何其它的后缀,因为ssh-keygen
会自动为公钥文件添加.pub
后缀。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/your_custom_name
这条命令中的参数说明如下:
-t rsa
: 指定密钥类型,这里是RSA。-b 4096
: 指定密钥的位数,这里是4096位,当前推荐的安全长度。-C "your_email@example.com"
: 添加一个注释(通常是电子邮件地址)到密钥中。这对于识别用途在哪、属于谁很有帮助。-f ~/.ssh/your_custom_name
: 指定生成密钥的路径和文件名。这里~/.ssh/
是SSH目录的标准位置,your_custom_name
是你的自定义文件名。步骤 3: 输入密码(可选)
在执行命令后,系统可能会提示我们输入一个密码(passphrase)。这一步是可选的,但是推荐我们为密钥对设置一个密码以增加安全性。如果不想设置密码,直接按回车键跳过。
步骤 4: 验证生成的密钥
生成密钥对后,我们可以通过列出
~/.ssh
目录的内容来验证它们是否成功创建:
ls ~/.ssh
应该看到我们的自定义文件名和同名的.pub文件,例如:
your_custom_name your_custom_name.pub
your_custom_name
是私钥文件,而your_custom_name.pub
是公钥文件。步骤 5: 使用SSH密钥
现在我们已经有了自定义命名的SSH密钥对,可以开始使用它们了。例如,我们可以把公钥(
.pub
文件)添加到想要通过SSH连接的服务器上的~/.ssh/authorized_keys
文件中,从而实现无密码登录。这样,我们就成功生成了一个自定义命名的SSH密钥对。确保保管好私钥,并且只将公钥共享给需要它的服务或个人。
# --------------- 创建新的 -------------------------- echo "# test1" >> README.md git init # git add README.md git add . git commit -m "first commit" git branch -M main git remote add origin git@github.com:kkk935208447/test1.git git push -u origin main # ---------------- 已存在的 ------------------------- git remote add origin git@github.com:kkk935208447/test1.git git branch -M main git push -u origin main
当在尝试向GitHub推送代码时收到"Permission denied (publickey)"错误,意味着GitHub无法通过公钥认证的SSH连接。这个问题通常由以下几个原因引起:
- 未将SSH公钥添加到GitHub账户:GitHub需要公钥来验证身份。
- SSH密钥没有加载到SSH代理:即使有一个SSH公钥,它也需要被SSH代理加载。
- SSH配置问题:有时候SSH配置不正确也会导致这个问题。
按以下步骤来解决这个问题:
步骤 1: 确认SSH公钥已添加到GitHub
在你的电脑上打开终端,使用
cat
命令查看你的公钥内容。假设密钥名称为id_rsa.pub
,运行:
cat ~/.ssh/id_rsa.pub
如果使用的是其他名称,请相应地替换文件名。
登录到GitHub账户,进入Settings > SSH and GPG keys。
点击New SSH key 按钮,将公钥(步骤1中显示的内容)粘贴到框中,并保存。
步骤 2: 确认SSH密钥已加载到SSH代理
运行
ssh-add -l
查看已加载的密钥。如果密钥已加载,这个命令将列出它们。ssh-add -l
如果你的密钥没有被列出,使用
ssh-add ~/.ssh/id_rsa
来添加它。如果你使用的是自定义名称,确保正确地替换了路径和文件名。
ssh-add ~/.ssh/custom_id_rsa # 我的系统是mac os,SSH agent 在一段时间后自动清除了添加的密钥,换句话来说上面的命令添加是临时的,下面有两种解决方案 1. ssh-add -t 12h ~/.ssh/custom_id_rsa # 这会将密钥添加到 SSH agent 并保持 12 小时。 2. ssh-add -K ~/.ssh/custom_id_rsa # 将密钥永久添加到 SSH agent ssh-add --apple-use-keychain ~/.ssh/custom_id_rsa # 在较新的 macOS 版本中,-K 选项可能已被弃用,你可能需要使用 --apple-use-keychain 选项代替。步骤 3: 尝试SSH到GitHub
运行以下命令来测试你的SSH连接到GitHub:
ssh -T git@github.com
如果连接成功,你将看到一条欢迎信息。这表示SSH设置正确。
步骤 4: 再次尝试git操作
在确认SSH设置无误后,再次尝试执行你的git命令:
git push -u origin main # 或 master等
怎么删除之前添加的一些无效的SSH代理呢?
删除之前add的无效SSH代理的方式
假设之前添加了几个不同的密钥到SSH代理,现在想删除它们:
查看已加载的密钥:
ssh-add -l
删除特定的密钥(例如:
~/.ssh/custom_key
):
ssh-add -d ~/.ssh/custom_key
删除所有的密钥:
ssh-add -D
- Host 主机1 # 可定义名称
- HostName 远程ip地址或域名
- Port 22435 # 远程端口
- User root # 远程登录名
- IdentityFile /Users/XXXXX/.ssh/id_rsa_XXXXX # 私钥地址(可选)
-
- Host 主机2 # 可定义名称
- HostName 远程ip地址
- Port 19351 # 远程端口
- User root # 远程登录名
- LocalForward 8080 localhost:8080 # 映射端口(可选)
- IdentityFile /Users/XXXXX/.ssh/id_rsa_XXXXX # 私钥地址(可选)
-
- Host 主机3
- HostName 远程ip地址或域名
- User root
- ForwardAgent yes # 不使用私钥,每次需输入密码
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。