ssh免密

1 步骤

机器A 想登录 机器B
第一步:在机器A上生成公钥和私钥

ssh-keygen [-C 'abc@qq.com']

默认生成的密钥文件在~/.ssh目录下的id_rsaid_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了。