linux使用公钥免密码登陆

Published on 2020-12-29 22:08 in 分类: 博客 with 狂盗一枝梅
分类: 博客

1.生成公钥

在命令行运行以下命令

ssh-keygen

根据提示生成RSA公钥和私钥,默认会将生成的文件存放到.ssh/目录下,文件名分别为:

id_rsa.pub
id_rsa

之后,运行命令

cat id_rsa.pub >> authorized_keys
chmod 600 .ssh/*

将公钥中的内容追加到authorized_keys文件

2.修改ssh配置文件

修改/etc/ssh/sshd_config配置文件

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

重启ssh服务:service sshd restart

之后就可以尝试在security crt中使用公钥进行免密登录了。 如果能使用公钥进行免密登录了,就可以修改/etc/ssh/sshd_config配置文件中的如下配置了:

PasswordAuthentication no

一定要先验证完了在修改该配置,否则的话就没办法登录了。

3.客户端登陆

windows可以先安装git bash,然后可以使用和linux环境一样的命令远程登陆linux机器:

ssh -i rsa私钥文件路径 登录名@ip地址

当然windows还可以使用security crt登陆。

需要注意的是服务端.ssh文件夹在哪个用户目录下,这里的登录名就要用哪个。

4.公钥登陆的原理解析

1456626-20180829125217689-1823874456.png

  1. Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
  2. Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R) ,然后将加密后信息发送给Client。
  3. Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  4. Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
  5. Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

转自 https://www.cnblogs.com/betterquan/p/12397751.html

5.腾讯云个坑货以上方法不管用

腾讯云上述方法就算都做了也不会管用,一定要登录腾讯云网页端控制台手动停机绑定ssh密钥,否则无论如何也不会生效的。

6.root用户登录的坑

root用户使用这种方法一定要注意要在/etc/ssh/sshd_config文件中允许root用户控制台登录,否则会登录失败。

7.报错:It is required that your private key files are NOT accessible by others

参考文章:https://blog.csdn.net/ibliplus/article/details/102405792

权限0644对于文件~/.ssh/id_rsa太开放了。

chmod 700 .ssh
chmod 600 .ssh/*

8.报错:Host key verification failed.

参考文章:https://blog.csdn.net/wd2014610/article/details/85639741

解决方法:

ssh-keygen -R 你要访问的IP地址

9.根据名字快速ssh

修改/etc/ssh/ssh_config文件,添加以下内容

Host centos2
  HostName 10.182.71.112
  Port 22
  User root

#linux #ssh
目录