0


SSH 安全外壳协议

一 、SSH协议


** SSH(**Secure Shell Protocol )是一种加密的网络安全协议,可在不安全的网络环境中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器的的连接。

** SSH最常见的用途是远程登陆系统,传输命令行界面和远程执行命令。**


** 1. SSH远程连接 **


** **远程的主机基于网络通过标准的远程协议远程登录到对应的主机,类似于直接在本地端操作

在SSH远程连接的过程中,为实现安全连接,客户端与服务器要经历五个阶段。

    1.版本协商阶段:

通过版本协商,确定使用的版本。

开启ssh服务,打开22端口,等待客户端

服务器发送报文告诉客户端,ssh版本和软件信息

客户端若支持,则使用该版本

    2.密钥和算法协商阶段

ssh支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法

    3.认证阶段

ssh客户端向服务器发起认证请求,服务器对客户端进行认证

    4.会话请求阶段

认证通过之后,客户端向服务器发起会话请求

    5.交互会话阶段

会话请求通过之后,客户端和服务端进行信息的交互

2.常用加密算法

对称加密算法

    对称加密算法就是整个加密解密过程使用同一个密钥,并且可以密文-密钥反推出原文。对称加密算法的优点是速度快,但是安全性相对于非对称加密来说低。

    使用对称加密,分享信息的各个个体之间都需要分享这个密钥,只要其中一个人密钥被盗窃了,那么整体加密的信息将都被破解了。

1.DES 特点:数据加密标准,速度较快,适用于加密大量数据的场合

2.3DES 特点:基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高

3.AES

非对称加密算法

    非对称加密算法采用了两个密钥加密,一般是公钥加密,私钥解密,所以非对称算法加密的数据可以放心在公网传播。非对称加密算法的优点是安全性高,但是速度相对于对称加密来说慢。

    非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。被公钥加密过的密文只能被私钥解密

1.RSA 特点:安全性基于大整数分解问题,其密钥长度通常为1024位或2048位

2.DSA 特点:安全性基于离散对数难题,用于验证数字文档的真实性和完整性

3.ECC 特点:安全性基于椭圆曲线密码学,具有更高的安全性和更短的密钥长度更适合 在资源受限的环境下使用,比如物联网设备、移动设备等

3. 安全验证

    从客户端来看,SSH提供两种级别的安全验证。

** 基于口令的安全验证**

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

** 基于密匙的安全验证**

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒 。

二 、 SSH服务

1. 配置文件 /etc/ssh/sshd_config

    首先,我们看看Linux系统中SSH服务的配置文件

在RHEL9.1版本中大概有130行,比较多,下面是一些平常可能用到的

                   ** /etc/ssh/sshd_config**
#Port 22 
#监听端口,默认监听22端口 【默认可修改】

#AddressFamily any 
#IPV4和IPV6协议家族用哪个,any表示二者均有

#ListenAddress 0.0.0.0 
#指明监控的地址,0.0.0.0表示本机的所有地址 【默认可修改】

#ListenAddress :: 
#指明监听的IPV6的所有地址格式

HostKey /etc/ssh/ssh_host_rsa_key 
# rsa私钥认证 【默认】

#HostKey /etc/ssh/ssh_host_dsa_key 
# dsa私钥认证

HostKey /etc/ssh/ssh_host_ecdsa_key 
# ecdsa私钥认证

HostKey /etc/ssh/ssh_host_ed25519_key 
# ed25519私钥认证

SyslogFacility AUTHPRIV 
#当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面

#LoginGraceTime 2m 
#登录的宽限时间,默认2分钟没有输入密码,则自动断开连接

#PermitRootLogin yes 
#是否允许管理员远程登录,'yes'表示允许

#MaxAuthTries 6 
#最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码

#MaxSessions 10 
#允许的最大会话数

AuthorizedKeysFile .ssh/authorized_keys 
#选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面

PasswordAuthentication yes 
#是否允许支持基于口令的认证

ChallengeResponseAuthentication no 
#是否允许使用键盘输入身份验证,也就是xshell的第三个登录方式

#UseDNS yes 
#是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no

Subsystem sftp /usr/libexec/openssh/sftp-server 
#支持 SFTP ,如果注释掉,则不支持sftp连接

AllowUsers user1 user2 
#登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录

2. ssh-keygen常用参数

    ssh-keygen命令用于生成、管理和转换认证密钥,它是SSH客户端程序的一部分。ssh-keygen可以生成RSA密钥对用于SSH协议版本1和版本2协议。     

下面是ssh-keygen的一些常见参数:

  • t 指定密钥类型(RSA DSA)
  • f

指定密钥文件名 默认为当前用户home路径下的.ssh隐藏目录

默认密钥文件名以id_rsa开头。如果是root用户, 则在/root/.ssh/id_rsa, 若为其他用户, 则在/home/username/.ssh/id_rsa

  • C添加注释- N设置新的密码

    3. linux客户端通过秘钥登录linux服务端 的 root用户

1.生成密钥对 - - -客户端

[root@localhost ~]# ssh-keygen -t RSA

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:LCxPlDFpovx7HnGXPn0ULvGArz6yrzzrvfpeeZ4eHZE root@localhost.localdomain

The key's randomart image is:

+---[RSA 3072]----+

| o. |

| . o+ . .|

| . . oo . o .E |

| o o . o = ..|

| .. = S o o +. |

| .+ + o o + ..|

| .o + + + .|

| . .ooo.o + o |

| o..B@Bo .+ |

+----[SHA256]-----+

2.查看保存密钥的目录

[root@localhost ~]# ll  /root/.ssh

total 12

-rw-------. 1 root root 2610 Oct 15 22:14 id_rsa

-rw-r--r--. 1 root root 580 Oct 15 22:14 id_rsa.pub

3.发送公钥到要连接的服务器主机(192.168.138.132)

[root@localhost ~]# ssh-copy-id -i 192.168.138.132

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/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用户密码

**root@192.168.138.132's password: **

4.在服务器相同目录找到公钥

[root@localhost ~]# ll /root/.ssh

total 4

-rw-------. 1 root root 580 Oct 15 22:25 authorized_keys

5**.此时我们就可以直接在客户端的 终端使用SSH连接到服务器了**

标签: ssh linux 服务器

本文转载自: https://blog.csdn.net/m0_63521991/article/details/127341252
版权归原作者 俺是普信男 所有, 如有侵权,请联系我们删除。

“SSH 安全外壳协议”的评论:

还没有评论