之前使用git时,一直提到了ssh-keygen,生成授权密钥对!之前自己是上网偶尔碰到,才知道这个东西的,所以使用github,包括coding,看到都需要ssh配置,就知道是怎么回事,不过之前停留的阶段,很浅!也就仅支持生成一对密钥对,然后免ssh输入密码登录!
ssh-keygen -t rsa // 会在 ~/.ssh/,生成 'id_rsa' 和 'id_rsa.sub' 2个文件
上面是最简单的用法,也就是我这么干的!只使用一个密钥,然后多个不同的地方(github, coding ,自己的ssh服务器),使用同一个公钥。今天,专门写下这个文档,自己巩固一遍,也给新人一个教程:
1.ssh服务:
全称:Secure Shell。建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
我们一般使用ssh,登录远程主机!
分为:
服务端 - sshd
客户端 - ssh
linux下的配置文件,/etc/ssh/下有服务端和客户端的配置:
sshd_config
ssh_config
windows下一般的客户端软件:
putty
secureCRT
Xshell
2.ssh-keygen - 一般ssh链接都需要输入用户名和密码,进行认证。而 ssh-keygen,就是为了解决这个交互认证问题,本地放置私钥,登录的服务器上放置公钥,ssh服务就检查密钥匹配,从而确认身份。
ssh root@192.168.0.1
输入用户密码,正确,然后登录服务器!
ssh-keygen的一般配置,可查看:http://blog.youkuaiyun.com/beyond__devil/article/details/53224566(之前写的博客)
再简述下步骤,我们以coding操作为例(因为里面有个 'ssh -t' 用于首次测试,我之前不知道):
1>ssh-keygen -t rsa // -t 是加密类型
2>将公钥内容复制到 coding 的 帐户->ssh公钥->新增公钥
3>ssh -T git@git.coding.net // 测试ssh是否成功
3.今天主要想说的是,生成多个ssh密钥对!更安全点!
一个github帐号
一个coding帐号
多个远程主机帐号
...
我们为每个帐号,来生成一个公钥
1>ssh-keygen -t rsa -f ~/.ssh/github/id_rsa // -f 是指定密钥对名称(没有-p参数,来代表生成到某个目录下)
2>vim ~/.ssh/config // 它也是ssh检查,密钥配置到一个配置文件,我们配置多个密钥,就需要在它里面进行配置
Host github.com www.github.com
IdentityFile ~/.ssh/github/id_rsa
3>将~/.ssh/github/id_rsa.sub内容,复制到github帐户的ssh认证
4>ssh -T git@github.com
总结:
创建多个密钥,就不能使用默认配置了,需要我们配置 ~/.ssh/config 配置文件,指定其中的 'Host' 和 'IdentityFile' 文件,一对表示一个配置
4.还有一种情况,多个ssh密钥对的情况:
同一个平台,我有多个账号。例如:我在github上有2个账号:
beyonddevil dongxuemin
通过3中,配置的host方式,没法区分我是哪一个用户(不知道ssh的密钥匹配是否是默认匹配第一个,进行验证),此时,需要指定主机名,主机名跟邮箱相关:
1>可以指定邮箱,同一个平台下,邮箱具有唯一标识符:
ssh-keygen -t rsa -C "devildongxuemin@gmail.com" -f ~/.ssh/github/devil
ssh-keygen -t rsa -C "dong19900611@126.com" -f ~/.ssh/github/dongxuemin
2>vim ~/.ssh/config
Host devil.github.com // devil代表 'devildongxuemin@gmail.com'
HostName github.com
IdentityFile ~/.ssh/github/devil
Host dongxuemin.github.com // dongxuemin代表 'dong19900611@126.com'
HostName github.com
IdentityFile ~/.ssh/github/dongxuemin
3>同样是将公钥复制到github账户的ssh认证
4>测试2个账号的ssh认证是否通过:
ssh -T git@devil.github.com // 注意添加上主机名
ssh -T git@dongxuemin.github.com // 注意添加上主机名
5>同一台电脑上,本地git和github的版本操作:
1)利用新的密钥,第一次克隆
git clone git@devil.github.com:beyonddevil/laravel5-rbac-example.git // 注意使用的是 'devil' 主机名(不然,git哪知道使用哪一个用户来克隆这个仓库!)
2)之前已经克隆过了,用的默认的 id_rsa 密钥,需要修改之前的密钥:
修改git仓库的配置文件:
.git/config
[remote "origin"]
url = git@devil.github.com:beyonddevil/laravel5-rbac-example.git // 使用 'devil' 主机名
5.ssh更多信息,可查看文档:
man ssh
man ssh_config