ssh中的密码登录和密钥登录

简介: ssh中的密码登录和密钥登录

一、ssh中的加密

1、对称加密

这种加密方式是大家都知道的,发送方和接收方都是一样的。

加解密的钥匙都是同一把,怎么样安全的保存这个密钥,这个密钥在需要加密的机器之前都是共享?很难保证这个密钥不被泄漏。

2、非对称加密

生成一对公私钥,私钥自己保管,公钥可以给其他人。

公私钥对是成对存在的,这连个密钥互不相同,两个密钥可以互相加密和解密。

一个用于加密,一个用于解密。具体哪个为私钥,哪个为公钥就看使用者自己管理。

注意:

①使用公钥进行加密,私钥解密,基本用于数据加密(相当于一对钥匙,对公钥加密,私钥需要对公钥解密)(解密时一个人知道

使用私钥加密公钥解密:用于数据认证(验证)解密时多个人知道,数据安全性不高。

ssh都是基于公钥加密。

公私钥都是客户端生成,要连接服务器,就要把公钥给服务器,就能免密登录。存放在家目录下面的.ssh下,没有的话需要自己进行创建。

密钥认证:公钥和私钥是一对文件,文件里面是一段字符串,告诉加密算法加密的时候,使用的参数:salt 盐值

public key 公开

private key 私有的

[root@nginx-kafka01 ssh]# cd ~/.ssh
[root@nginx-kafka01 .ssh]# ls
authorized_keys  config  id_rsa  id_rsa.pub  known_hosts
[root@nginx-kafka01 .ssh]# pwd
/root/.ssh

know_hosts是存放客户机使用ssh第一次连接服务器时产生公钥存放的位置,它会将服务器上sshd守护进程的公钥复制到本地存放到本地,每行存放一台服务器的公钥,用来验证服务器的身份。如果出现多个用户登录冲突的话,可以将该文件删除。然后重新进行连接,就会重新生成这个文件。存放一个ip地址的公钥(当默认yes时会写入)保存在本地,可以有多个(有授权的情况下),没有授权就只有一个,第一次手动输入yes就可以保存,第二次发送的时候会对比是不是一样的,不一样的话就直接挂掉中间人。

二、ssh常见的两种登陆方式:

1、密码登陆

2、密钥登陆(免密码登录)

1、密码登录

1.1 密码登录认证流程(原理)

密码登录认证原理:

client客户机向server发送登录请求,server服务器将自己的公钥发送给client(客户机)。

client使用这个公钥,将公钥进行加密,然后再发送给server。

server用私钥解密登录密码,验证合法性。

server返回验证结果为client。

这个流程中存有的一个问题,怎么保证收到的公钥就是目标server的公钥?

密码登录时需要注意:中间人攻击,所以如果一个攻击者中途拦截了client的登录请求,发送自己的公钥给client,client端就会用攻击者的公钥进行数据加密,攻击者接收到信息之后,用自己的私钥就可以进行解密了,这就窃取了client的登录信息了。

为了解决这个问题,client端第一次登录的时候,会进行一个登录公钥确认。

如果服务器重启了,就会删掉know_hosts:rm -rf know_hosts

查看公钥指纹:

ssh-keygen-if  /etc/ssh/ssh_host_rsa_key.pub

server主机的pubkey保存在/etc/ssh目录下,默认使用ssh_host_ecdsa_key.pub

[root@mysql-rpm ssh]# cd /etc/ssh
[root@mysql-rpm ssh]# ls
moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_ecdsa_key  ssh_host_ed25519_key    ssh_host_rsa_key

2、公钥认证,免密码登录

公钥认证流程中,为什么要进行免密码登录:为了能对被连接的机器进行批量化处理。

2.1 公钥认证,免密码登录原理

登录原理详解:

client端生成秘钥对,将公钥追加在server端的~/.ssh/authorized_keys

客户端发送登陆请求,server收到请求之后,生成随机字符串发送给client

client用自己的私钥对字符串进行加密,发送给server。

server收到加密字符串之后用公钥解密,比较解密出的字符串和之前生成的字符串事发后一致。

返回结果给client(一致就允许登录,不一致就不允许)。

确认server服务端这个host主机摘要,确认成功之后(yes)就会将server端的pubkey保存在

~/.ssh/known_hosts里面,以后每次连接都会验证这个know_host里的key和收到的pubkey是否保持一致的。

2.2 公钥认证,免密码登录流程

使用公钥认证,免密码登录这种方式:windows连接到Linux,Linux连接到Linux上都是适用的。

ssh的公钥认证流程图:

首先需要准备两台机器:

A : 192.168.2.152 客户机

B:192.168.2.132 服务机

A机器的root用户 -》连接到B机器的root用户

密钥:公钥和私钥是一对文件,文件里面是一段字符串,告诉加密算法加密的时候,使用的参数。

public key  公开

private key  自己

1、在A客户机机器上生成密钥对

在192.168.2.152上使用root用户生成秘钥对,客户机的公钥会存放在用户的家目录下的.ssh/文件下的authorized_keys(/root/.ssh/authorized_keys)。

ssh-keygen:是生成公钥和私钥对的命令。

#生成公钥,中间一直敲回车
[root@nginx-kafka01 ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): y
y already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):   敲回车
Enter same passphrase again:    敲回车
Your identification has been saved in y.
Your public key has been saved in y.pub.
The key fingerprint is:
SHA256:lkDtYmNyA9pV93YhNzv+M0VWgIgXVbANDZgDOF5jDCM root@nginx-kafka01
The key's randomart image is:
+---[RSA 2048]----+
|    E +*ooo****..|
|    .o+.B.*..*.+.|
|   o +.= o .+ = o|
|  . o O... . o + |
|     = +S     . .|
|       .       ..|
|               o.|
|                o|
|                 |
+----[SHA256]-----+

进入用户的家目录下(cd /root/.ssh)

查看公钥:cat id_rsa.pub:

[root@nginx-kafka01 .ssh]# ls
authorized_keys  config  id_rsa  (私钥)  id_rsa.pub (公钥)  known_hosts
查看公钥
[root@nginx-kafka01 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTWqYxhTLaNCHIoF3NxrarhuDr9BQ5V48DkTFMuqQbTtJoQvtRyN7Ly9Fxq18BfNsm5U17RT+xAi1+ojVj2ZSCiIUlzaH3gR1JjpLzG54JjUq6TWSibLsYfvvkVCWYxXF584Ke8Bs7CBQZz3g9fnfi6KHoPvSXlNtrkldAwFgmG7uHqjRVsu6EGPKWqcrrDxdrZnIxvuF52Q/erPHew7aAqaAgWzsIl18AYTgiYmaafqdQ8ZteO+atfdRCw1/QczmoSeYAeNofPk98oW19uSDib/7D5BUVfpb0WjnmtrMpYkSpNQbATY6fOHn1ONvqCYhxi776ivziUxgAhUxd8ctf root@localhost.localdomain

信用关系:

双向信任

单向信任

2、上传公钥到对方的服务器(B服务机器上)

将公钥上传到对方,要求对方的服务器运行时使用root用户登录。公钥的最后一行有指明需要服务器使用本机机器的root用户来登录:root@localhost.localdomain

如果想要单向通信通道:就直接在A机器上执行这条命令,那么它连接B机器就不需要密码登录。

双向通道:在两个机器上都执行这条命令,B机器上也执行这条命令,但是ip要改为A机器的(ssh-copy-id -p 22 -i id_rsa.pub root@192.168.2.152),登录双方机器的时候都不需要输入密码,方便进行各种操作(执行对方机器上的文件等)。

ssh-copy-id 复制  -i:指定端口文件  -p:port  指定端口号

[root@nginx-kafka01 .ssh]# ssh-copy-id -p 22 -i id_rsa.pub root@192.168.2.132
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
#首先在这里第一次上传公钥的时候是需要输入对方机器的密码,后面执行的时候就不需要输入了
root@192.168.2.132's password:  
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh -p '22' 'root@192.168.2.132'"
and check to make sure that only the key(s) you wanted were added

3、验证登录是否需要密码

在这里执行登录B服务机的时候就不需要输入密码了。

[root@nginx-kafka01 .ssh]# ssh -p '22' 'root@192.168.2.132'
Last login: Wed Jul 27 17:00:06 2022 from 192.168.2.118

此时会在对方的机器上生成一个文件authorized_key;里面存放的是对方的公钥,存放用来进行合法身份验证。证明是Linux。

root@nginx-kafka02 .ssh]# ls
authorized_keys  known_hosts

小结:公钥(public key)和私钥(private key)

公钥和私钥是成对存在的,这两个密钥互不相同,两个密钥可以互相加密和解密。

不能根据一个密钥而推算出另外一个密钥。

公钥对外公开,私钥只有私钥的持有者才知道。

私钥应该由密钥持有者进行妥善保管

根据实现的功能不同,可以分为数据加密和数字签名。

三、公钥认证排错

1、确保公钥正确

2、确保~/.ssh/文件权限为600

3、确保家目录以及.ssh目录权限为755以下权限,即属组和其他人没有7的权限

ssh 192.168.119.137 -l sc -p 22  其中的  -l :指定用户名 ,-p:指定端口。

需要注意的是:登录是会默认会去寻找家目录下的~/.ssh/id_rsa去进行验证,所以尽量不要在生成key 的时候将它的默认路径更改。

当前客户机上的sc用户将生成的公钥放到服务器机上的家目录下,放在~/.ssh/know_hosts文件中

ssh命令登录:

-l:指定登录的用户名

-p:指定server的端口

-i:指定私钥文件,默认会在~/.ssh/去找私钥

-o:接特定设置选项

不接用户名的话,当前是什么用户,就会登录到对方的什么用户,比如当前是root用户,如果不指定的话,就会登录到对方的root用户。

无需输入yes,自动保存hostkey:

ssh -o StrictHostKeyChecking=no 192.168.0.132 -p 223


相关文章
|
16天前
|
分布式计算 Hadoop 网络安全
杨校老师课堂之集群内SSH免密登录功能配置
杨校老师课堂之集群内SSH免密登录功能配置
21 0
|
8天前
|
网络协议 Linux 网络安全
蓝易云 - centos用ssh登录连接缓慢处理
请根据自己的实际情况尝试以上方法,找出导致SSH登录缓慢的原因,并进行相应的处理。
8 1
|
15天前
|
安全 Linux Shell
【Linux基础】SSH登录
安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。
28 6
|
17天前
|
监控 安全 Linux
【权限维持】Linux&OpenSSH&PAM后门&SSH软链接&公私钥登录
【权限维持】Linux&OpenSSH&PAM后门&SSH软链接&公私钥登录
|
20天前
|
Linux 网络安全
|
2天前
|
网络安全 数据安全/隐私保护
服务器密码登录出现了:SSH connection failed: connect ECONNREFUSEDxxxxxxxx:22 * Xshell提示 SSH connection fa
服务器密码登录出现了:SSH connection failed: connect ECONNREFUSEDxxxxxxxx:22 * Xshell提示 SSH connection fa
|
5天前
|
Linux 网络安全 数据安全/隐私保护
如何在Linux中设置SSH无密码登录
这样,你就设置了SSH无密码登录。但请注意,这种方式虽然方便,但如果你的私钥落入他人手中,他们就能访问你的服务器,所以要妥善保管你的私钥。
13 0
|
9天前
|
安全 Linux Shell
SSH服务器拒绝密码登录的解决方法
SSH服务器拒绝密码登录的解决方法
26 0
|
19天前
|
安全 网络安全 开发工具
【GIT】GitHub添加ssh密钥
【GIT】GitHub添加ssh密钥
24 0
|
1月前
|
网络安全
ssh 登录欢迎信息 登录之前与登录之后
ssh 登录欢迎信息 登录之前与登录之后
17 0