本文已参与【新人创作礼】活动,一起开启掘金创作之路。
想要从linux命令行clone github仓库的话,目前不支持HTTPS的方式了。那么不想使用Github CLI 的话,就必须配置SSH连接了。
这里就总结一下如何生成ssh 公钥和私钥,并配置以登陆github。
生成SSH密钥
Linux自带生成SSH密钥的程序。
打开终端,不用开启root,输入
ssh-keygen -t rsa
就会在~/.ssh下生成一个私钥id_rsa,和一个公钥id_rsa.pub。
生成过程中会询问是否设置passphrase,这就相当于保护这个私钥的密码,避免被破译。
安全起见,建议设置密码。
配置Github
- 复制公钥文件的内容(可以用cat命令查看),
cat ~/.ssh/id_rsa.pub Github中,打开Settings>SSH and GPG keys>New SSH key. 
- 在
Key文本框中粘贴上复制好的公钥内容,并且设置好Title后,点击Add SSH key。 .
检查SSH连接
在Linux命令行中输入
ssh -T git@github.com
如果设置了passphrase,此时会被要求输入设置好的passphrase。
Enter passphrase for key 'pass/to/private/key':
之后,如果收到下面的提示,则表示设置成功。
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.
否则,可能会看到这样的提示
Permission denied (publickey).
这时可以参考这个链接进行问题解决 Error: Permission denied (publickey)
如果除了permission denied以外,还出现了:sign_and_send_pubkey: signing failed: agent refused operation的报错提示,有两种解决方法:
.ssh文件夹由于手动创建的原因权限不足。运行下面这行代码即可chmod 700 ~/.ssh && chmod 600 ~/.ssh/*- 密钥没有被添加到缓存中。运行
ssh-add来添加,随后运行ssh-add -l来检测是否添加成功
使用Github
现在,就可以开心的在Linux中clone各种github仓库了
附录:更改密钥名称
如果觉得id_rsa这样的名字不够让人满意的话,可以通过下面的方式改名。
方法一:为已创建的密钥改名
首先,用mv之类的命令更改~/.ssh中的密钥名。
mv id_rsa new_private_key_name
mv id_rsa.pub new_public_key_name.pub
但是这样有时还是会出现Permission denied (publickey).这样的情况.
这是因为,ssh命令默认只会读取id_rsa这个私钥,所以如果改变私钥名称的话,需要相应地修改配置文件~/.ssh/config。
比如像下面这样:
Host github.com gist.github.com api.github.com
IdentityFile /path/to/renamed/private/key
方法二:创建时使用新的名称
Linux下创建SSH密钥时,可以利用参数指定新的名称
ssh-keygen -t rsa -f ~/.ssh/customized_key_name
如果出现Permission denied (publickey),请参照方法一中的解决办法。
参考链接
ssh-keygen之后,生成的密码都叫id_rsa.pub,我想改名不行吗?- segmentfault
How to solve "sign_and_send_pubkey: signing failed: agent refused operation"?