生成ssh公钥和私钥,authorized_keys和know_host

来源:赵克立博客 分类: 其它 标签:GitGitHub发布时间:2019-11-25 22:57:48最后更新:2023-04-11 14:15:40浏览:1068
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2023-04-11 14:15:40
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

免登陆原理

免密登录原理通过RSA公开密钥算法的一种应用。RSA是公开密钥密码体制的一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制(非对称加密) 。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的。


通俗的来说就是同时生成公钥和私钥,私钥自己保存,公钥发给其他人。

2304111681193693520328.png

生成公钥和私钥

确保系统中有openssh,打开命令行输入下面命令后会自动在当前用户目录生成公钥和私钥

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

1911251574693758111999.png

如图所示

1911251574693829123625.png

把id_rsa.pub添加到github或gitee或需要添加公钥的地方就可以啦


连接测试

ssh -v -p 22 root@www.xxxx.com


authorized_keys

ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免受到攻击。


常规我们ssh连接到其他服务器的时候是需要输入密码的,这个文件中可以实现你的免密登录连接,只需要两步操作:


1、在要被连接的目标服务器上生成 ssh 公钥 xxx.pub(关键命令为 ssh-keygen 本文不做赘述)

2、将远程服务器上生成的 xxx.pub 中的内容,拷贝到当前服务器的 ~/.ssh/authorized_keys 中(不存在自己创建)


这样再进行 ssh 连接目标服务器的时候,就不会提示输入密码了,结果是直接连接成功。


known_hosts

第一次连接其他服务器的时候,会有一个一大串的提示 “Are you sure you want to continue connecting (yes/no)” 我们是否确认要连接到目标服务器。当我们确认后,这个远程服务器的信息就会被记录到我们本地的 ~/.ssh/known_hosts 中(如果一开始不存在则会自动创建),这个文件里面有我们刚刚连接的服务器的信息。

known_hosts 文件每连接一个新的远程服务器都会被追加产生一条新的数据记录。包括远程机器ip、远程机器公钥

当我们以后再连接之前连接过的目标服务器时,因为 known_hosts 文件中记录了我们曾经连接过,所有就不会在提示询问我们是否要连接了。

注意这两个文件是在用户目录中的,所以要和你当前用户对应,例如 root 用户就是 /root/.ssh/ 目录。

~/ 是引用当前用户主目录的写法。


有以下两个解决方案: 

1、手动删除修改known_hsots里面的内容

2、修改配置文件"~/.ssh/config",加上这两行,重启服务器。文件不存在的话自己创建一个

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

如果域名指定ip变更了,此时就会验证失败,就需要删除里面对应记录,默认为22端口使用第一条命令删除,自定义端口使用第二条命令删除

ssh-keygen -R www.git.com
ssh-keygen -R  [www.git.com]:22022



总结

关于 authorized_keys和know_host的作用老是看一段时间就忘记,下面总结一下 

authorized_keys是当前系统做服务端时用来保存客户的的公钥的,可提前把客户机的公钥保存到服务端的这个文件中省得输密码

know_host 是当前系统做为客户端时用来保存服务端发过来的公钥,默认情况下第一次连接时会有一个访问,yes后就会保存进去,主要是为了防止中间人攻击发送恶意公钥,所以才要你确认下



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python