SSH = Secure Shell
一种安全加密网络传输协议
加密基础
对称加密
发送方和接收方都使用同一个密钥
发送方:明文+密钥 -> 密文
接收方:密文+密钥 -> 明文
加密算法:
AES(高级加密标准,Advanced Encryption Standard):目前最常用的加密算法(AES-128、AES-192、AES-256),SSH传输数据时会使用AES加密
DES(数据加密标准,Data Encryption Standard):早期加密标准,密钥长度短(56位)
非对称加密
非对称加密使用一对密钥:公钥Public key和私钥Private Key
公钥用于加密,私钥用于解密,公钥加密的数据只能用私钥解密
发送方:使用接收方的公钥Pub进行加密
接收方:使用自己的私钥Private进行解密
加密算法:
RSA(Rivest-Shamir-Adleman):基于大整数因子分解难题(常见密钥长度 2048、4096 位)
ECDSA(椭圆曲线数字签名算法):基于椭圆曲线离散对数问题,密钥短但同等安全
Ed25519:更快、更安全的椭圆曲线签名算法,SSH 默认使用
哈希加密
哈希是一种单向函数,用于计算固定长度的明文值,确保数据完整性。
哈希值 = hash(明文)
- 不可逆(无法从哈希值计算明文)
- 抗碰撞(难以找到一种 hash(明文1)=hash(明文2))
- 输入敏感(哪怕明文只改动1比特,哈希值也会大幅变化)
加密算法:
SHA-256
MD5(消息摘要算法):不安全,不用于加密传输,可用于验证传输信息完整性
SSH认证
固定密码📚或密钥对🔑登陆SSH服务器,弱强度的固定密码有被暴力破解的可能。
- 固定密码登陆方式:客户端通过ssh命令向ssh服务器发送登陆请求;服务器向客户端协商密钥用于构建加密通信通道;加密通道建立后,服务器向客户端索要登陆密码,并与服务器上存储的密码比对;密码校验通过后,服务器允许客户端访问Shell。

- 密钥对的登陆方式包括公钥和私钥概念,公钥即可以公开的密钥,私钥只有在本地存储才安全。

密钥存储
- 本机公钥信息存储在文件:
~/.ssh/authorized_keys
公钥通常的内容是(加密类型+公钥文+域):
ssh-ed25519 AAAAAAAAAAC1yc2EAAAADAQABAAACAQDRxHaAqjB5LcvNGMuB/W9vL2sfbfvl8CKgkZUT9041MCtV9j== hi@ziyuan.work
-
~/.ssh/
目录还会存放服务器的公钥和私钥文件,通常是.pem.pub和.pem文件,文件格式为PEM(Privacy-Enhanced Mail)
.pem私钥文件内容(私钥文):
-----BEGIN RSA PRIVATE KEY-----
AB3NzaC1yc2EAAAADAQABAAABgQDlZICl9XYz0yovhi4ajYlyDfHL5tNt2jmX/Js0I7c+Heqb3ExzOd+Td0aYVruMQkYsulXsQfe/wzQ145OppbeFRkZATKIOkb/DcN2YvTH+YtjO/GJPtdT5WVA6I/3a+pd2AgcXVh
-----END OPENSSH PRIVATE KEY-----
.pem.pub公钥文件内容(加密类型+公钥文+域):
ssh-rsa CCxrInV8Dgij2vuufsw4iLF/05hg2L9rNHdwaQx6vSDZKgjw2VPzWxCufJeKMEZbKh9a4m7D1rMPN7Z1rS6E10/vTFD2OJgbpi8eM1TondTlxVa8BZ0roXLuYCpue/CyqOoYfm74fgmAbTKWUzg86jCVL9ngn66UQsW+AtgBX00d3XZ1oJ1lL9lvlyJwE6NXIMy3f9F5dJ0RZmqXtKLBeAR+SD+lD7sPug6O/nYpEzK5BVDFGwFYtjO/GJPtdT5 hi@ziyuan.work
- 密钥生成
使用ssh-keygen命令可以生成私钥和公钥
ssh-keygen -t rsa -b 4096 -m PEM -f mykey.pem
# 运行以上命令会在文件夹中得到mykey.pem和mykey.pem.pub文件,移动文件到~/.ssh目录
# -t 加密算法,可以有rsa dsa ed25519 ecdsa
# -b 密钥位数(bit),当-t 为rsa和ecdsa时有效
# -m 密钥格式,可以有PEM OPENSSH PKCS8
# -f 文件名,通常为xxxxx.pem
- 使用ssh-copy-id命令可以将公钥发送给服务器,实现密钥对登陆
ssh-copy-id user@192.168.1.10
# user:远程主机用户
# 192.168.1.10:远程主机IP
发表回复