一 、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连接到服务器了**
版权归原作者 俺是普信男 所有, 如有侵权,请联系我们删除。