想要从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

  1. 复制公钥文件的内容(可以用cat命令查看),
    cat ~/.ssh/id_rsa.pub
    
  2. Github中,打开 Settings > SSH and GPG keys > New SSH key
    .
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 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的报错提示,有两种解决方法:

  1. .ssh文件夹由于手动创建的原因权限不足。运行下面这行代码即可
    chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
    
  2. 密钥没有被添加到缓存中。运行ssh-add来添加,随后运行ssh-add -l来检测是否添加成功

使用Github

现在,就可以开心的在Linuxclone各种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),请参照方法一中的解决办法。


参考链接

generating SSH keys - Github

common SSH problems - Github

ssh-keygen之后,生成的密码都叫id_rsa.pub,我想改名不行吗?- segmentfault

SSH原理与运用 - 阮一峰的网络日志

How to solve “sign_and_send_pubkey: signing failed: agent refused operation”?

Logo

更多推荐