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 文件中。

 




相关推荐