SSH免密码登录的原理
阅读数:136 评论数:0
跳转到新版页面分类
hacker
正文
假设S为服务器端,C为客户端,C有S的访问密码,或者说C有S的访问权限。
那么免密码登录的原理就是在S一端存放那些有访问权限的C端的身份认证。
即,在C端以ssh-gen命令生成一对公/私钥,私钥放在C端,公钥上传到S端。
这样,每次从C登录S的时候,C端凭借着私钥让服务器端认证自己
一、Linux具体实现
1、查看ssh服务状态
systemctl status sshd
// 如果没有启动
systemctl start sshd
2、C上生成秘钥
CentOS7 默认使用RSA加密算法生成密钥对,保存在~/.ssh目录下的id_rsa(私钥)和id_rsa.pub(公钥)。也可以使用“-t DSA”参数指定为DSA算法,对应文件为id_dsa和id_dsa.pub,密钥对生成过程会提示输入私钥加密密码,可以直接回车不使用密码保护。
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/gGrlDJN5euMS5aai5feBkEI/0WjEnzPzx1xGtdkKG4 root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|.o.. o +o |
| .o.oo . + +.. |
| oo.o. .. B |
| o..oo E |
| ...oSo . |
| .o +o+. |
| ooB + . |
| .oX.= . . |
| .o=o=.o . |
+----[SHA256]-----+
[root@localhost ~]# ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
[root@localhost ~]#
3、如果找到不.ssh目录
如果在上面生成秘钥后,执行 cd ~/.ssh 找不到 .ssh 目录,是因为没有使用 ssh 登录过,使用 ssh 登录一下即可生成 .ssh 目录,之后再重新执行 ssh-keygen 生成秘钥即可。
4、移动id_rsa.pub公租到S端
scp ~/.ssh/id_rsa.pub 192.168.0.101:~/.ssh/
或者使用ssh-copy-id
ssh-copy-id -i .ssh/id_rsa.pub 用户名字@192.168.x.xxx
5、在S端将公钥导入~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
另外需要注意请务必将服务器上
(1)~/.ssh权限设置为700
chmod 700 ~/.ssh
(2)~/.ssh/authorized_keys的权限设置为600
如果权限不对,无法生效。
二、ssh-keygen
ssh-keygen
是一个用于生成 SSH 密钥对的命令行工具。SSH 密钥对由一对密钥组成:私钥(private key)和公钥(public key)。私钥用于对身份进行身份验证,而公钥则被放置在远程服务器上,用于验证你的身份。
1、生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将生成一个 RSA 类型的密钥对,密钥长度为 4096 位,并将你的电子邮件地址作为注释添加到密钥中。你可以将 "your_email@example.com"
替换为你自己的电子邮件地址。
-
系统会提示你选择密钥文件的保存位置和名称。如果你不需要自定义,可以直接按 Enter 键接受默认值。通常,私钥将保存在
~/.ssh/id_rsa
,而公钥将保存在~/.ssh/id_rsa.pub
。 -
系统还会要求你设置一个密码来保护私钥。这是可选的,如果你不想设置密码,可以直接按 Enter 键跳过。
-
生成 SSH 密钥对后,你可能需要将公钥文件的内容复制到远程服务器的
~/.ssh/authorized_keys
文件中,以便进行身份验证。
2、删除已知主机
ssh-keygen -R <hostname or IP address> -f <known_hosts file>
ssh-keygen -R 123.56.17.124 -f "/home/abc/.ssh/known_hosts"
这将从 "/home/abc/.ssh/known_hosts"
文件中删除与主机名为 "123.56.17.124"
相关联的条目。
请注意,这将删除指定主机的密钥信息,下次连接到该主机时,会重新生成并添加到 known_hosts
文件中。