ssh:加密 压缩 远程连接加密码协议
telnet:明文 无压缩 远程协议
openssh服务器
SSH (Secure Shell) 协议:
是一种安全通道协议
对通信数据进行了加密处理,用于远程管理
压缩功能
OpenSSH免费: ssh 收费
服务名称:sshd
服务端主程序: /usr/sbin/sshd
服务端配置文件: /etc/ssh/sshd config
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务(文件传输功能)
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。 相比较之前用 Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。
1.2 ssh原理
1.2.1公钥传输原理
客户端首次发起连接
服务端 会生成一个随机会话id会将服务端的公钥以及会话id发给客户端
客户端收到会话id以及服务端的公钥会用客户端自己的公钥以及会话id做运算,产生一个结果然再用服务端的公钥加密再将这个加密结果传给服务端
服务端收到加密结果后会用自己的私钥解密得到客户端的公钥和会话id运算的结果因为已知会话id 所以就可以得到客户端的公钥最后双方持有对面的公钥
ssh加密通讯原理
(1)对称加密
1、概念 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
2、常用算法 在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
3、特点 1、加密方和解密方使用同一个密钥; 2、加密解密的速度比较快,适合数据比较长时的使用; 3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
4、优缺点 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。 对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担
(2)非对称加密
1、概念 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
2、常用算法
-
RSA(RSA algorithm):目前使用最广泛的算法
-
DSA(Digital Signature Algorithm):数字签名算法,和 RSA 不同的是 DSA仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快
-
ECC(Elliptic curve cryptography,椭圆曲线加密算法)
-
ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和 DSA的结合,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障
3、原理 首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下
4、优缺点 相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。
ssh服务的最佳实践
1.建议使用非默认端口22
2.禁止使用protocol version 1
3.限制可登录用户 白名单
4设定空闲会话超时时长
5.利用防火墙设置ssh访问策略
6.仅监听特定的IP地址公网内网
7.基于口令认证时,使用强密码策略,比如: tr -dc A-Za-z0-9_</dev/urandom | head -c 12 xargs
8使用基于密钥的认证
9.禁止使用空密码
10.禁止root用户直接登录
11限制ssh的访问频度和并发在线数
12.经常分析日志 分离
13.禁用反向dns
实际操作
1 修改默认端口
vim /etc/ssh/sshd_config
2 禁止root用户登录
vim /etc/ssh/sshd_config
vim /etc/pam.d/su
3.白名单黑名单列表
ftpusers 黑名单 不让用户登录 与pam配合使用
vim /etc/ssh/sshd_config
1.3.2 使用秘钥对及免交互验证登录
原理:
-
用户/密码
-
基于秘钥
用户/密码:
1.生成公钥和私钥
2.将公钥导给对面
原理
1. 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2. 用户会根据服务器发来的公钥对密码进行加密
3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于密钥的登陆方式
1. 首先在客户端生成一对密钥(ssh-keygen)
2. 并将客户端的公钥ssh-copy-id 拷贝到服务端
3. 当客户端再次发送一个连接请求,包括ip、用户名
4. 服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc
5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
1.4ssh客户端
scp命令 —— 远程安全复制
sftp命令 —— 安全FTP上下载
格式:sftp user@ip