阅读须知
本文面向入门, 可能有出现错误的情况, 欢迎指出.
本文主要引导解决与发现问题的方法, 解决方案可以翻到最下面
代码块中
$
开头表示输入内容
>
开头代表输出内容
#
后面代表注释的内容
示例如下
$ 我是输入内容
> 我是输出内容 # 我是注释,用于解释发生了什么
场景
在添加ssh的教程中,一般都会让我们使用
ssh git@github.com
验证是否连接成功
首先按需求使用ssh-keygen
创建密钥(请确保密钥在~/.ssh中)
> Enter file in which to save the key: mykey # 请记住这里, 是出现问题的主要原因
> Enter passphrase (empty for no passphrase): 114514 # 这一步和下一步都是设置密码, 不输入也可以. 实际输入的时候你是看不到内容的, 这是正常现象.
> Enter same passphrase again:114514
使用'ssh git@github.com'连接
此时请确保已将
公钥(.pub)!!!
添加到github/gitee
$ ssh git@github.com
> git@github.com: Permission denied (publickey).
可以看到明明在github/gitee
中 添加了公钥, 私钥位置也没问题, 但是却依旧连接失败
原因
这里可以用到 -v
参数, 这个参数可以显示连接时的日志.
使用
-vvv
能看到更详细的信息, 但这里不需要, 对这些信息代表什么感兴趣的可以去看看ssh连接调试
.
$ssh git@github -v
...
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_rsa
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_ecdsa
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_ecdsa_sk
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_ed25519
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_ed25519_sk
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_xmss
> debug1: Will attempt key: /c/Users/xxx/.ssh/id_dsa
...
可以看到, 连接日志并没有尝试我们的/c/Users/xxx/.ssh/mykey
私钥
那么原因已经出来了: 因为我们命名了密钥, 但是ssh连接默认是会使用默认名称的, 并不是我们放在~./ssh
目录下就自动读取
解决方案
知道了原因, 解决方法就是告诉ssh去使用我们的密钥, 主要有以下两种方法
1. 使用-i
参数指定私钥位置
这种方法每次都要指定私钥位置, 不方便, 不太推荐
$ ssh git@github -i ~/.ssh/mykey # 这里mykey是你命名的私钥名称
2. 使用config
配置文件
在~/.ssh/config
添加文件config
在里面添加内容
Host github.com
User git
IdentityFile ~/.ssh/mykey # 这里mykey换成你命名的私钥名称
在配置文件中使用配置项IdentityFile
指定了连接github使用的密钥.
再次尝试, 已经可以正常连接了.
3. 拓展内容
关于ssh, config里还有许多方便的配置, 感兴趣也可以去了解一下.
比如
Host github
HostName github.com
User git
IdentityFile ~/.ssh/mykey
这样甚至可以直接使用ssh github
连接
只是用于示例, git没有必要这样使用
- github 密钥 Permission git publickeygithub密钥permission git 密钥permission publickey变态 permission publickey denied github 密钥git私人github permission publickey coding denied permission publickey denied permission npm publickey install permission localhost publickey denied permission repository publickey错误 密钥github ssh