ssh免密
1 步骤
机器A 想登录 机器B
第一步:在机器A上生成公钥和私钥
ssh-keygen [-C '[email protected]']
默认生成的密钥文件在~/.ssh
目录下的id_rsa
和id_rsa.pub
,名字上可以看出一个是私钥一个是公钥。
第二步:将公钥给B
拷贝上面的pub文件中的文本内容,添加到B机器的~/.ssh/authorized_keys
文件的最后,注意这个文件如果没有就自己创建一个,该文件就是用来存储多个公钥的,每行一个。
第三步:A->B
在机器A上运行
ssh user@B
2 流程简述
上面A登录B过程中,A会到自己的~/.ssh/id_rsa
找到私钥,然后加密个东西发给B,B收到后到自己的~/.ssh/authorized_keys
中按行取出公钥,找一下看有没有能解密成功的,如果有就拿出来说明配对成功了,建立连接。后面的就会协商对称加密进行后续交互。
细节1:如果A生成的公钥没放到默认路径下怎么连接?
ssh -i /path/another_id_rsa u@B
细节2:用户问题
A登录B不加u@,直接ssh B,则按照当前A的用户名连B;
B索取公钥的~目录是指,A中输入的u这个用户的目录;
3 git SSH
git ssh登录也是用的ssh免密登录的原理。将pub文件拷贝到github的账号设置下即可实现免密操作自己的仓库。在遇到上面细节1的问题的时候有以下解决方案。
添加~/.ssh/config
Host githost
IdentityFile /tmp/id_rsa_test1
4 可复制性
从上面流程可以看出,B上已经加了A的公钥后,在登录B的时候只需要A上有id_rsa这个文件即可。所以我们可以将这个文件拷贝出来到其他机器上如C,那么C就可以免密登录B了。