Linux SSH验证方式

如果想安全传输数据,最好就是加密,ecure Shell(SSH),可以登录远程服务器。

 

SSH的原理

SSH加解密是通过公钥和私钥进行的,一般公钥用来加密,私钥用来解密。

 

整个过程:

服务器收到用户的登录请求,把自己的公钥发给用户,用户用公钥加密用户名和密码,然后发给服务器,服务器用自己的私钥进行解密,如果和设置的密码相同则登录成功 ,这个过程也有一定的风险,如果有坏人假装自己是服务器,弄个假的公钥发给用户。但是用户不知道,还是用假的公钥加密用户名和密码,最终假服务器就得到用户名和密码。

 

所以,为了应对风险,SSH协议使用2种方式:

基于口令方式验证

基于密钥方式验证

口令登录

当用户尝试登录服务器时,服务器会用MD5算法把公钥变成128位的指纹,把这个指纹显示给用户,一般这个指纹会放到服务器控制台上。

 

用户需要人工比对,如果正确,再继续输入密码。第一次服务器会保存此次成功连接的主机信息,其实用户电脑上也会保存服务器信息。下次登录直接让用户输入密码,不再比对指纹信息。

 

 

公钥登录

因为口令登录每次都要输入密码,所以有公钥登录,不用每次输入密码。公钥登录,就是用户把自己的公钥放到服务器上,在用户登录时,服务器会向用户发一段随机字符串,用户用自己的私钥加密后,再发送给服务器。接着,服务器用公钥解密,如果成功,就证明这个用户是可信的,后面再登录就不用输入密码。

 

 

上面都是引用别人对SSH的介绍,下面是自己整理的实验

---------------------------------------------------------------------------------------------------------------------------

 

 

之前通过远程登入都是使用Telnet,Telnet是明文传输的,不安全。使用了ssh是对其做了加密,而且可以验证身份。远程登入一台主机就可以使用ssh hostname就可以登入远程主机了

[kiosk@foundation0 ~]$ ssh server0

[student@server0 ~]$

 

要远程登入主机必须得保证可以解析主机名

[kiosk@foundation0 ~]$ host server0

server0.example.com has address 172.25.0.11

 

ssh登入远程主机还可以使用指定用户名进行登入,如果不指定默认是当前用户。

[kiosk@foundation0 ~]$ ssh student@server0  --以student用户登入到远程主机

Last login: Mon Apr  9 14:03:37 2018 from 172.25.0.250

[student@server0 ~]$

 

在远程登入到另外一台主机上可以使用w来查看哪些用户登入到本机。

[kiosk@foundation0 ~]$ ssh student@server0

Last failed login: Mon Apr  9 14:11:32 CST 2018 from server0.example.com on ssh:notty

There were 2 failed login attempts since the last successful login.

Last login: Mon Apr  9 14:09:34 2018 from 172.25.0.250

[student@server0 ~]$ w -f

 14:16:57 up 14 min,  2 users,  load average: 0.30, 0.12, 0.13

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

student  pts/0    172.25.0.250     14:16    1.00s  0.16s  0.03s w -f

 

 

SSH HOST KEYS(两台主机之间的数据被加密了,同时认证对端的身份)

ssh是通过秘钥实现加密的,采用的是非对称加密算法。

两个key,一个叫做public key,一个叫做private key,这些key在/etc/ssh下面

[student@server0 ~]$ cd /etc/ssh  --这个是ssh的配置文件

[student@server0 ssh]$ ll

total 268

-rw-------. 1 root root     242153 Mar 20  2014 moduli

-rw-r--r--. 1 root root       2123 Mar 20  2014 ssh_config

-rw-r--r--. 1 root root       4439 Jul 11  2014 sshd_config

-rw-r-----. 1 root ssh_keys    227 Jul 11  2014 ssh_host_ecdsa_key

-rw-r--r--. 1 root root        162 Jul 11  2014 ssh_host_ecdsa_key.pub

-rw-r-----. 1 root ssh_keys   1675 Jul 11  2014 ssh_host_rsa_key

-rw-r--r--. 1 root root        382 Jul 11  2014 ssh_host_rsa_key.pub

红色的都是key,带了pub是公钥,没有pub的是私钥。这里有两种算法,一种是RSA算法,一种是DSA算法。这里一般采用的是RSA算法。

 

当使用foundation0----------------------------------->server0是如何实现?

在server0上面两个key,这两个key一个是公钥,一个是私钥,其实也就是一对秘钥。

  1. 当foundation0去连接server0的时候,当执行ssh server0的时候

(ssh server0 --------------------------------------->)

  1. 这个时候在student下面将公钥传过来

(public key <----------------------------------------)

(3)将公钥传过来,传到哪了呢?传到了某一个用户的家目录

如果当前用户是root就传到root家目录下面的.ssh下面,会有一个文件叫know_hosts,这个文件其实就是server0的公钥。

 

下面可以验证

[kiosk@foundation0 ~]$ pwd

/home/kiosk

[kiosk@foundation0 ~]$ cd .ssh/

[kiosk@foundation0 .ssh]$ ls

authorized_keys  config  id_rsa  id_rsa.pub  known_hosts

[kiosk@foundation0 .ssh]$ rm -rf  known_hosts  --将这个文件删除掉

[kiosk@foundation0 .ssh]$ ssh root@server0  --重新ssh

Warning: Permanently added 'server0,172.25.0.11' (ECDSA) to the list of known hosts.

Last login: Mon Apr  9 14:35:14 2018 from 172.25.0.250

[root@server0 ~]# exit

logout

Connection to server0 closed.

[kiosk@foundation0 .ssh]$ ls        --在foundation0上面的.ssh目录下面可以看到又产生了这个know_host文件

authorized_keys  config  id_rsa  id_rsa.pub  known_hosts

[kiosk@foundation0 .ssh]$ cat known_hosts

server0,172.25.0.11 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHX+o9KAnlfw2dE7CsmM4hqfv1udM79a5NWC2BuWlmfKSwfYLptPQMJF8bnqaz0EjDlxCxRu/aito+GphPLzp/k=

这个know_host文件是用来加密的。也就是foundation0得到了server0这个后,它就可以使用私钥来加密,传到server0之后就用公钥解密。

 

认证对端的身份:

这里有一种情况,如果有一台主机冒充server0,这个时候foundation0登入过去就可以知道是不是server0,现在将server0的公钥将其删除,如下:

[root@server0 ssh]# ls -l

total 268

-rw-------. 1 root root     242153 Mar 20  2014 moduli

-rw-r--r--. 1 root root       2123 Mar 20  2014 ssh_config

-rw-r--r--. 1 root root       4439 Jul 11  2014 sshd_config

-rw-r-----. 1 root ssh_keys    227 Jul 11  2014 ssh_host_ecdsa_key

-rw-r--r--. 1 root root        162 Jul 11  2014 ssh_host_ecdsa_key.pub

-rw-r-----. 1 root ssh_keys   1675 Jul 11  2014 ssh_host_rsa_key

-rw-r--r--. 1 root root        382 Jul 11  2014 ssh_host_rsa_key.pub

[root@server0 ssh]# ls

moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_rsa_key.pub.bak

ssh_config  ssh_host_ecdsa_key  ssh_host_rsa_key.bak

[root@server0 ssh]# rm -rf ssh_host_*   --将server0上面的钥匙全部删除,只留下sshd的配置文件

[root@server0 ssh]# ls

moduli  ssh_config  sshd_config

 

[root@server0 ssh]# systemctl  restart  sshd

[root@server0 ssh]# ls /etc/ssh

moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_rsa_key.pub

ssh_config  ssh_host_ecdsa_key  ssh_host_rsa_key

 

[root@server0 ssh]# exit  --这个时候退出,再去连接server0,。

logout

Connection to server0 closed.

[kiosk@foundation0 .ssh]$ ssh root@server0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the ECDSA key sent by the remote host is

c1:d9:82:72:0f:ba:6f:d6:fd:de:1a:ef:92:70:89:3c.

Please contact your system administrator.

Add correct host key in /home/kiosk/.ssh/known_hosts to get rid of this message.

--公钥已经改变了

Offending ECDSA key in /home/kiosk/.ssh/known_hosts:1

--产生了新的公钥,产生的公钥放在/home/kiosk/.ssh下面

Password authentication is disabled to avoid man-in-the-middle attacks.

Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.

Last login: Mon Apr  9 16:05:16 2018 from 172.25.0.250

 

可以看还是可以登入到冒充server0的主机,但是有告警提示,提示公钥已经改变了,但是之后又产生了一个新的公钥。

登入远程主机产生了上面的提示就要小心了,就要注意登入的server0是否是真要登入的server0呢?因为秘钥已经改变了。

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

 

 

 

 

 

认证:在进行远程管理的时候,有两种方法,一种是基于用户名和密码的,平时在管理的时候需要输入用户名和密码。另外一种是不需要输入用户名和密码。这种是基于秘钥的认证,所以就不需要输入用户名和密码。

 

 

基于用户名密码验证:

[kiosk@foundation0 .ssh]$ ssh student@desktop0

Warning: Permanently added 'desktop0,172.25.0.10' (ECDSA) to the list of known hosts.

student@desktop0's password:        --这个地方要输入密码

Last login: Mon Apr  9 15:10:35 2018 from 172.25.0.250

 

 

 

基于秘钥的认证:

很简单只需要两条命令,现在要在desktop0上面不需要输入密码远程登入到server0上面。

Desktop0--------------------------------------->Server0

因为我这个环境已经搭建好了,所以我先将Desktop0,Server0,root家目录下面的.ssh目录下面的文件全部删除。

[root@desktop0 ~]# cd .ssh/

[root@desktop0 .ssh]# ls

authorized_keys

[root@desktop0 .ssh]# rm -rf authorized_keys    ---在desktop下面将删除

 

 

[root@server0 ~]# cd .ssh/   --server0下面也删除了

[root@server0 .ssh]# ls

 

这个时候再去从desktop0上面去登入server0

[root@desktop0 .ssh]# ssh root@server0

root@server0's password:    --这个时候需要密码验证了

 

现在是desktop0去远程管理server0,秘钥就在desktop0上面产生。

1.产生秘钥

[root@desktop0 .ssh]# 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:

c9:ff:47:2a:67:93:5f:d0:c9:9d:9f:28:7f:d5:78:b0 [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

|                 |

|                 |

|                 |

|       . .    o.+|

|        S     .B+|

|         .    E.*|

|          .. = o+|

|          ..O .o |

|           +.=o  |

+-----------------+

全部都按回车键,这个时候就在家目录下面.ssh下面产生了一个公钥和一个私钥。上面全部都是按回车键,其实可以私钥可以受密码保护的,但是按下回车键就不受密码保护了,也就是说任何用户都可以使用这个私钥了。

[root@desktop0 .ssh]# ls

id_rsa  id_rsa.pub  known_hosts

 

 

2.将公钥传至服务器,这里的服务器是server0

[root@desktop0 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@server0

/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@server0's password:

 

Number of key(s) added: 1

 

Now try logging into the machine, with:   "ssh 'root@server0'"

and check to make sure that only the key(s) you wanted were added.

 

[root@server0 ~]# ls .ssh/   --登入到server0会发现家目录下面的.shh/下面多了一个文件,和之前删除的文件名是一样的,这个就是在desktop0上面将公钥传过去了。

authorized_keys

 

 

3.尝试远程登入

[root@desktop0 .ssh]# ssh root@server0

Last login: Mon Apr  9 17:01:18 2018 from desktop0.example.com

[root@server0 ~]#

可以看到登入成功了,不需要输入密码,所以这个方式是基于秘钥的认证。

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/81390919
今日推荐