什么是 Git 的 ssh key?这个问题其实我也很困惑,因此我才专门分享这篇关于 ssh key 的文章,着重分析了解什么是 ssh key,它有什么用,怎么能用好它?本文主要由从网上收集资料加上本身的经验汇总而成的经验干货,能够说的实战经验之谈,但其中也有一些错漏,欢迎指正。git
首先ssh是一种网络协议,用于计算机之间的加密登陆。github
咱们使用ssh登陆服务器时,通常常见的会使用用户名/密码方式登陆,也可使用ssh key实行免密码登陆,通常如今这种方式被Git服务器使用的比较多。shell
简单来讲,SSH提供了两种级别的安全验证:安全
第一种级别是基于密码的安全验证,知道帐号和密码,就能够登录到远程主机。服务器
Team的开发工做中,就是使用这种方式登录编译服务器,或者开发机器。由于是在内网中,这种级别的安全验证已经足够了。网络
第二种级别是基于Public-key cryptography (公开密匙加密)机制的安全验证。hexo
原理以下图所示:app
其优势在于无需共享的通用密钥,解密的私钥不发往任何用户。ssh
即便公钥在网上被截获,若是没有与其匹配的私钥,也没法解密,所截获的公钥是没有任何用处的。ide
这是根据 Github 提供的 help 文档教程:
首先进到 .ssh 目录下:
$ cd ~/.ssh # Checks to see if there is a directory named ".ssh" in your user directory
使用ssh-keygen产生新的key:
$ ssh-keygen -t rsa -C "your_email@example.com" # Creates a new ssh key using the provided email. # Generating public/private rsa key pair. # Enter file in which to save the key (/home/you/.ssh/id_rsa).
使用默认的文件名直接enter, 按提示输入密码(若是不提供密码,SSH将无密码链接,若是private key泄露可能会有安全问题):
Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again]
密匙产生成功:
Your identification has been saved in /home/you/.ssh/id_rsa. Your public key has been saved in /home/you/.ssh/id_rsa.pub. The key fingerprint is: 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
上传public key到Github帐户
登陆github
点击右上方的Accounting settings图标
选择 SSH key
点击 Add SSH key
在出现的界面中填写SSH key的名称,填一个你本身喜欢的名称便可,而后将上面拷贝的~/.ssh/id_rsa.pub文件内容粘帖到key一栏,在点击“add key”按钮就能够了。
添加过程github会提示你输入一次你的github密码
设置SSH使用HTTPS的403端口
在局域网中SSH的22端口可能会被防火墙屏蔽,能够设置SSH使用HTTPS的403端口。
测试HTTPS端口是否可用:
$ ssh -T -p 443 git@ssh.github.com Hi username! You've successfully authenticated, but GitHub does not provide shell access.
编辑SSH配置文件 ~/.ssh/config 以下:
Host github.com Hostname ssh.github.com Port 443
测试是否配置成功:
$ ssh -T git@github.com Hi username! You've successfully authenticated, but GitHub does not provide shell access.
这里是利用ssh key实现免密码登陆服务器。
生成ssh key
ssh-keygen -t rsa -C "your name"
这样默认会在本地的~/.ssh目录下生成id_rsa,id_rsa.pub两个文件:
id_rsa是私钥。
id_rsa.pub是公钥。
使用ssh key
ssh key方式登陆远程服务器
咱们须要把id_rsa.pub拷贝到远程服务器的~/.ssh下面。
并更名为authorized_keys,这样咱们就可使用key的方式登陆了。
$ ssh git@your.server.com Enter passphrase for key '~/.ssh/id_rsa':
这样咱们输入shh key的密码就能够登陆了。
ssh key方式使用git clone代码
若是咱们使用的是github/gitcafe, 只须要把id_rsa.pub的内容拷贝出来。
在github的setting里面添加便可, 咱们就可使用ssh 方式clone代码了。
//请修改成你本身的git地址 git clone git@github.com:chenyangcun/mydouban.git
多站点使用不一样的ssh key
默认ssh登陆时使用的是id_rsa文件,咱们也能够指定其余文件。
首先咱们生成不一样的key:
ssh-keygen -t rsa -C "user1" -f user1 ssh-keygen -t rsa -C "user2" -f user2
咱们生成user1,user2两个不一样的ssh key,而后咱们在.ssh下建立config文件。
输入:
Host company HostName company.com User git IdentityFile ~/.ssh/user1 Host github HostName github.com User git IdentityFile ~/.ssh/user2
这样访问company.com就会使用user1, 访问github.com就会使用user2。
同一站点使用不一样的ssh key
咱们有时候须要在同一站点使用不一样的ssh key, 好比使用gitcafe的pages服务。
想要建立两个站点,可是gitcafe上不容许不一样的用户使用同一个ssh key。
咱们在config文件里作相应的修改
Host gitcafe-site1 HostName gitcafe.com User git IdentityFile ~/.ssh/user1 Host gitcafe-site2 HostName gitcafe.com User git IdentityFile ~/.ssh/user2
而后咱们更改git参考的远程地址
#site1 $ git remote remove origin $ git remote add origin git@gitcafe-site1:user1/user1.git #site2 $ git remote remove origin $ git remote add origin git@gitcafe-site2:user2/user2.git
关键是把gitcafe.com改成gitcafe-site1和gitcafe-site2
若是使用hexo, 在hexo的config文件中,把deploy的远程地址改为gitcafe-site1这样的形式便可:
deploy: type: git repo: git@gitcafe-site1:user1/user1.git
这里以配置github的ssh key为例子。
1. 配置git用户名和邮箱
git config user.name "用户名" git config user.email "邮箱"
在config后加上 --global 便可全局设置用户名和邮箱。
2. 生成ssh key
ssh-keygen -t rsa -C "邮箱"
而后根据提示连续回车便可在~/.ssh目录下获得id_rsa和id_rsa.pub两个文件,id_rsa.pub文件里存放的就是咱们要使用的key。
3.上传key到github
clip < ~/.ssh/id_rsa.pub
复制key到剪贴板
登陆github
点击右上方的Accounting settings图标
选择 SSH key
点击 Add SSH key
4. 测试是否配置成功
ssh -T git@github.com
若是配置成功,则会显示:
Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
解决本地多个ssh key问题
有的时候,不只github使用ssh key,工做项目或者其余云平台可能也须要使用ssh key来认证,若是每次都覆盖了原来的id_rsa文件,那么以前的认证就会失效。
这个问题咱们能够经过在~/.ssh目录下增长config文件来解决。
下面以配置搜狐云平台的ssh key为例。
1. 第一步依然是配置git用户名和邮箱
git config user.name "用户名" git config user.email "邮箱"
2. 生成ssh key时同时指定保存的文件名
ssh-keygen -t rsa -f ~/.ssh/id_rsa.sohu -C "email"
上面的id_rsa.sohu就是咱们指定的文件名,这时~/.ssh目录下会多出id_rsa.sohu和id_rsa.sohu.pub两个文件,id_rsa.sohu.pub里保存的就是咱们要使用的key。
3. 新增并配置config文件
添加config文件
若是config文件不存在,先添加;存在则直接修改:
touch ~/.ssh/config
在config文件里添加以下内容(User表示你的用户名)
Host *.cloudscape.sohu.com IdentityFile ~/.ssh/id_rsa.sohu User test
4. 上传key到云平台后台(省略)
5. 测试ssh key是否配置成功
ssh -T git@git.cloudscape.sohu.com
成功的话会显示:
Welcome to GitLab, username!
至此,本地便成功配置多个ssh key。
往后如需添加,则安装上述配置生成key,并修改config文件便可。
这里主要讲述在 gitlab 上配置使用 ssh key
客户端生成ssh-key
若是已经有sshkey,可用以前的。
在客户端执行命令 ssh-keygen -t rsa -C "for xxx"
-C 选项后是备注,可随意。
命令执行后会要求输入key存储的文件名和passphrase:
输入一个特有的文件名,不然使用默认的 id_rsa。
passphrase。不输入也能够。输入以后,提交的时候要输入这个passphrase
完成后在 ~/.ssh/ 会生成2个文件:
id_rsa 和 id_rsa.pub。(前者是私钥,注意保管,后者是公钥)
以下:
[huqiu@101 liaohuqiu]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/huqiu/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
添加ssh-key到gitlab
登陆以后: Profile Settings => SSH-Keys => Add SSH key。
输入以前生成的公钥,标题随意:
基本使用介绍
配置好sshkey以后,你就能够在命令行下使用git命令进行操做了。强烈建议使用命令行而不是使用图形界面客户端。
建立项目:
建立完成:
基本操做
clone(克隆)
add(跟踪)
commit(提交)
push(推送)
clone(克隆)
[huqiu@101 git]$ git clone git@git.liaohuqiu.net:huqiu/test.git Cloning into 'test'... warning: You appear to have cloned an empty repository. Checking connectivity... done
进入目录
[huqiu@101 git]$ cd test/ [huqiu@101 test]$ ll total 0
建立一个文件
[huqiu@101 test]$ echo "### hello, test" > README.md
为项目配置用户名和邮箱,用户名和邮箱会进入到日志
[huqiu@101 test]$ git config user.name liaohuqiu [huqiu@101 test]$ git config user.email liaohuqiu@gmail.com
add(跟踪),添加文件到本地库
[huqiu@101 test]$ git add README.md *commit(提交)* [huqiu@101 test]$ git commit -a -m 'add README' [master (root-commit) 1095bd8] add README 1 file changed, 1 insertion(+) create mode 100644 README.md
push(推送)
[huqiu@101 test]$ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@git.liaohuqiu.net:huqiu/test.git * [new branch] master -> master
提交完成后记录:
项目的文件状况:
这里主要是处理 github 的 ssh key 与 gitlab 的 ssh key 的冲突和相互覆盖问题
若是你之前用 github 的 ssh key ,后来又多了一个 gitlab 的帐号,那么在绑定 gitlab 的 ssh key 的时候,你会发现 原来的 github 的 ssh key 被覆盖了,这就是问题所在,怎么能实现二者同时绑定呢:
在.ssh目录下新建一个config文件配置一下,就能解决gitlab与github的ssh key的冲突。
生成并添加第一个ssh key
cd ~/.ssh ssh ssh-keygen -t ras -C "youremail@yourcompany.com"
这时能够一路回车,不输入任何字符,将自动生成id_rsa和id_rsa.pub文件。
生成并添加第二个ssh key
$ ssh-keygen -t rsa -C "youremail@gmail.com"
注意,这时不能一路回车,不然邮箱将覆盖上一次生成的ssh key,给这个文件起一个名字, 好比叫 id_rsa_github, 因此相应的也会生成一个 id_rsa_github.pub 文件。
此时查看.ssh下的目录文件,发现多了id_rsa_github和id_rsa_github.pub两个文件。
添加私钥
$ ssh-add ~/.ssh/id_rsa $ ssh-add ~/.ssh/id_rsa_github
修改配置文件
在 ~/.ssh 目录下新建一个config文件
touch config
并添加如下内容
# gitlab Host gitlab.com HostName gitlab.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa # github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_github
给github/gitlab上添加ssh key
查看ssh key执行cat id_rsa_github.pub内容,将文本内容拷贝到https://github.com/settings/ssh。
生成ssh key的方法能够去看官方教程,这里再也不赘述。
测试
$ ssh -T git@github.com
若是输出:
Hi xuyuan923! You've successfully authenticated, but GitHub does not provide shell access.
说明成功的连上github了。