ssh原理
一、协议原理
SSH全称Secure Shell协议,用于计算机间的加密通信
SSH由客户端与服务端组成:服务端是sshd的守护进程来监听来自客户端的请求;客户端包含ssh程序以及其他子功能程序(远程拷贝scp、远程登录slogin、安全文件传输sftp等…)
SSH协议实现连接的过程如下:
准备工作:客户端A生成秘钥对,并将公钥写入服务端B的authorized_keys中。
连接过程:客户端向服务端请求登录;服务端检查authorized_keys中是否有响应的公钥信息;服务端使用相应的公钥将随机数s1加密后发送给客户端;客户端将收到的密文利用私钥解密得到明文s2,并将其返回给服务端;服务端对比s1与s2
二、SSH协议下.ssh文件夹内部文件作用
~/.ssh文件夹中一般会有known hosts, autherized keys, 以及多个私钥或公钥文件
windows内:
1 | PS C:\Users\WilsonPC\.ssh> ls |
ubuntu内:
1 | # 以我自己的Ubuntu虚拟机为例 |
config文件是在配置VScode远程登录ssh插件时的配置文件
known_hosts记录的ssh登录过的网站所返回的公钥信息。如果首次访问的ip不存在于known_host中,系统会提示是否添加新的hosts信息。如果访问的ip在known_hosts中已经存在,系统会核对本次返回的公钥与known_hosts中记录的上次返回的公钥是否相同,如果不同则会中止连接,以此防止中间人攻击
公钥文件与authorized_keys:
1 | PS C:\Users\WilsonPC\.ssh\pubKeys> cat .\rsa_demo.pub |
其中,公钥文件开头为使用的协议(上图中ssh-rsa表示为使用的是rsa协议);随后的长字符串为公钥的内容;最后的wilson@myPC(用户名@IP地址——myPC在本地DNS文件中被解释为本机器的IP地址)表示可以使用这个公钥以wilson用户登录myPC地址的机器
- 私钥文件
如果没有额外的配置操作,一般会使用~/.ssh目录下的默认私钥名的文件(如id_rsa, id_ecd等…)
ssh加密协议
1.RSA,DSA,ECDSA,EdDSA和Ed25519都用于数字签名,但只有RSA也可以用于加密。
RSA(Rivest–Shamir–Adleman)是最早的公钥密码系统之一,被广泛用于安全数据传输。它的安全性取决于整数分解,因此永远不需要安全的RNG(随机数生成器)。与DSA相比,RSA的签名验证速度更快,但生成速度较慢。
DSA(数字签名算法)是用于数字签名的联邦信息处理标准。它的安全性取决于离散的对数问题。与RSA相比,DSA的签名生成速度更快,但验证速度较慢。如果使用错误的数字生成器,可能会破坏安全性。
ECDSA(椭圆曲线数字签名算法)是DSA(数字签名算法)的椭圆曲线实现。椭圆曲线密码术能够以较小的密钥提供与RSA相对相同的安全级别。它还具有DSA对不良RNG敏感的缺点。
EdDSA(爱德华兹曲线数字签名算法)是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。签名创建在EdDSA中是确定性的,其安全性是基于某些离散对数问题的难处理性,因此它比DSA和ECDSA更安全,后者要求每个签名都具有高质量的随机性。
Ed25519是EdDSA签名方案,但使用SHA-512 / 256和Curve25519;它是一条安全的椭圆形曲线,比DSA,ECDSA和EdDSA 提供更好的安全性,并且具有更好的性能(人为注意)。
2.其他说明
RSA密钥使用最广泛,因此似乎得到最好的支持。
ECDSA(在OpenSSH v5.7中引入)在计算上比DSA轻,但是除非您有一台处理能力非常低的机器,否则差异并不明显。
从OpenSSH 7.0开始,默认情况下SSH不再支持DSA密钥(ssh-dss)。根据SSH标准(RFC 4251及更高版本),DSA密钥可用于任何地方。
Ed25519在openSSH 6.5中引入。



