目录
3.1.1?对称加密(Symmetric Encryption)
3.1.2?非对称加密(Asymmetric Encryption)
协议:
程序:
OpenSSH:OpenSSH 是 SSH 协议的免费开源实现,包括服务器端和客户端程序。它支持加密和身份验证功能,被广泛用于Linux和类Unix系统上
PuTTY:PuTTY 是一个流行的免费的SSH和Telnet客户端程序,可在Windows平台上使用。它提供了SSH连接所需的工具和功能
WinSCP:WinSCP 是一个免费的SFTP、SCP和FTP客户端程序,用于在Windows平台上与远程计算机进行安全文件传输。它支持SSH协议,提供了用户友好的界面
SecureCRT:SecureCRT 是一个商业化的SSH客户端程序,提供了强大的功能和定制选项,适用于Windows、Mac和Linux操作系统
接下来主要详细介绍ssh协议和OpenSSH程序
SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中安全地进行远程访问和管理。它通过加密数据传输,防止信息被窃听或篡改
功能:
概念:在对称加密中,加密和解密使用相同的密钥。发送方使用密钥将消息加密,接收方使用相同的密钥将消息解密。常见的对称加密算法包括AES(高级加密标准)、DES(数据加密标准)和3DES等
优点:对称加密算法加密和解密速度快,适合大量数据的加密和解密操作
缺点:密钥的安全分发是对称加密的一个挑战,因为发送方和接收方都需要共享相同的密钥。如果密钥在传输过程中被截获,那么加密的安全性就会受到威胁
概念:在非对称加密中,加密和解密使用不同的密钥,分别称为公钥和私钥。公钥用于加密,私钥用于解密。常见的非对称加密算法包括RSA、Diffie-Hellman和ECC(椭圆曲线加密)等
优点:非对称加密算法解决了密钥分发的问题,因为公钥可以公开发布,而私钥则只有接收方知道
缺点:非对称加密算法的加密和解密速度比对称加密算法慢,因此不适合大规模数据的加密和解密操作
区别 | 对称加密 | 非对称加密 |
---|---|---|
密钥数量 | 使用相同的密钥进行加密和解密 | 使用不同的密钥进行加密和解密 |
速度 | 较快 | 较慢 |
密钥分发 | 需要解决密钥分发的问题 | 通过公钥和私钥的方式解决了密钥分发的问题 |
安全性 | 较低 | 更高 |
SSH协议中的公钥传输原理通常涉及到公钥认证和密钥交换
详细阐释:
① 客户端向服务端发起连接请求
② 服务端接收到请求后,返回自己的公钥以及一个会话id(此处客户端得到服务端的公钥)
③ 客户端生成密钥对,客户端用自己的公钥异或会话id,计算出一个值res,并用服务端的公钥加密
④客户端发送加密值到服务端,服务端用私钥解密,得到res
⑥ 服务端用解密后的值res异或会话id,计算出客户端的公钥(此处服务端得到客户端公钥)
⑦ 最终:双方各自持有三个密钥,分别为自己的一对公钥、私钥,以及对方的公钥,之后所有的通讯都会被加密
详细阐释:
首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下
openSSH是实现SSH协议的开源软件项目,适用于各种UNIX、Linux操作系统
执行“systemctl start sshd”命令即可启动sshd服务,默认端口使用的22端口
sshd:服务名称
/usr/sbin/sshd? :服务端主程序
/etc/ssh/sshd_config:服务端配置文件,设置与服务端相关的应用可通过此文件实现
/etc/ssh/ssh_config:客户端配置文件,设置与客户端相关的应用可通过此文件实现
~/.ssh/known_hosts:客户端用来存储已知服务端公钥信息的文件
①当SSH客户端连接到一个新的服务端时,它会检查这个服务端的公钥是否在~
/.ssh/known_hosts
?文件中。如果公钥在这个文件中,则说明这个服务端是可信的,SSH 客户端会继续连接并进行认证;如果公钥不在这个文件中,则 SSH 客户端会给出一个警告,提示用户这个服务端可能不是可信的,并询问用户是否继续连接②如果客户端之前已经连接过这个服务端,那么它就会在 ~
/.ssh/known_hosts
?文件中找到这个服务端的公钥,并使用它进行加密通信。(再次连接时,可通过对比文件中的公钥来确定连接的服务器是否正确)。如果客户端之前没有连接过这个服务端,那么它就会将这个服务端的公钥添加到 ~/.ssh/known_hosts
?文件中,以便下次连接时使用注:
如果服务端的公钥发生了变化,比如重新安装了操作系统或者更换了硬件,那么客户端会提示服务端的公钥发生了变化,并询问用户是否继续连接。这是因为公钥的变化可能意味着服务端的身份已经被篡改,因此需要用户确认服务端的身份。(解决方法:将之前的密钥文件删除,重新连接新的服务端,生成新的密钥文件)
用于建立安全的远程连接
ssh IP地址
ssh? ?用户名@IP地址
ssh -l 用户名 IP地址
ssh? ? ip地址? ? ?-p? ? 端口号
首先可在服务端的/etc/ssh/sshd_config配置文件修改端口号
systemctl restart sshd #重启sshd服务,修改的配置才能生效
那在客户端远程连接服务端时,可通过-p选项来指定服务端的端口号才能登录
SSH跳板登录(SSH jump host)是一种通过一个中间主机(跳板主机)来访问其他无法直接访问的目标主机的方法。它提供了一种安全的方式来管理和连接到位于内部网络中的主机,同时限制了对内部网络的直接访问
使用SSH命令从本地计算机连接到跳板主机,再通过跳板主机连接到目标主机
ssh -t 跳板机ip地址 ssh -t 跳板机ip地址 ........ ssh -t 目的机ip地址
#在目标服务端主机上模拟防火墙拒绝客户端连接,客户端使用跳板连接到目标主机上
[root@localhost .ssh]#iptables -A INPUT -s 172.16.12.10 -j REJECT
[root@localhost ~]#ssh -t 172.16.12.12 ssh 172.16.12.13
SSH服务可以通过远程执行命令的方式进行远程操作。通过在ssh
命令后直接跟上要执行的命令,可以在远程主机上执行该命令而无需登录到远程主机的shell中
?ssh? ?ip地址? ? 想使用的命令
SSH的黑白名单通常指的是用于限制SSH连接的IP地址列表,以便控制哪些IP地址可以连接到SSH服务器(黑名单)或者哪些IP地址不允许连接到SSH服务器(白名单)
黑名单是一种限制访问的方式,其中列出的IP地址被禁止连接到SSH服务器,而不在黑名单的IP地址允许连接到SSH服务器
设置黑名单:
①通常由系统管理员在SSH服务器的配置文件中定义。在OpenSSH中,这通常是在/etc/ssh/sshd_config
文件中进行配置
②可以使用DenyUsers
或DenyGroups
选项来指定禁止连接的用户或用户组
白名单是一种允许访问的方式,其中列出的IP地址被允许连接到SSH服务器。只有在白名单中列出的IP地址才能建立SSH连接,其他IP地址将被拒绝
设置白名单:
①通常由系统管理员在SSH服务器的配置文件中定义。在OpenSSH中,这通常是在/etc/ssh/sshd_config
文件中进行配置
②可以使用AllowUsers
或AllowGroups
选项来指定允许连接的用户或用户组
在172.16.12.12服务器上配置:允许所有主机连接本机的mimi用户,却只允许172.16.12.10主机连接本机的dh用户,修改完之后重启sshd服务
?只允许172.16.12.10客户端连接服务端的dh用户
?允许所有主机连接本机的mimi用户
修改服务端配置:禁止root用户登录,再重启sshd服务
①建议使用非默认端口
②禁止使用protocol version 1
③限制可登录用户的白名单
④设定空闲会话超时时长
⑤利用防火墙设置ssh访问策略
⑥仅监听特定的IP地址?
⑦基于口令认证时,使用强密码策略
比如:tr? -cd? [a-zA-Z0-9]? < /dev/urandom? |? head -c 12 |?xargs
⑧使用基于密钥的认证
⑨禁止使用空密码
⑩禁止root用户直接登录
?限制ssh的访问频度和并发在线数
?经常分析日志分离
可指定算法类型:输入? ssh-keygen? -t? ed25519 (ecdsa)
[root@localhost ~]#ssh-keygen #客户端创建密钥
#客户端将密钥传送到远程服务端
[root@localhost ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.12.10
此时我们去登录服务端,会使用密钥文件进行验证,提高了安全性
为保障更安全,可开启密钥验证,关闭密码验证,如此只有密钥的客户端才可连接到远程服务端?
客户端先输入 ssh-agent ?bash 将这个命令交给 bash 去管理
再输入 ssh-add ?是将用户的私钥添加到运行中的 ssh-agent 中,这样在后续的SSH连接过程中,就不需要每次都手动输入私钥的密码了。一旦私钥被添加到ssh-agent 中,它会暂时保存解密后的私钥以供后续使用
但重启客户端设备后就会失效,需要重新进行上述操作