Linux SSH 原理和使用

SSH 原理

典型的RSA非对称加密

RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MIT)的三位学着:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。

它的原理较为简单,我们假设有消息发送方A和消息接收方B,通过下面的几个步骤,我们就可以完成消息的加密传递:

消息发送方A在本地构建密钥对,公钥和私钥;

消息发送方A将产生的公钥发送给消息接收方B;

B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;

反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。

由于公钥是消息发送方A暴露给消息接收方B的,所以这种方式也存在一定的安全隐患,如果公钥在数据传输过程中泄漏,则A通过私钥加密的数据就可能被解密。

如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。

当然,这种方式可能存在数据传递被模拟的隐患,我们可以通过数字签名等技术进行安全性的进一步提升。由于存在多次的非对称加解密,这种方式带来的效率问题也更加严重。

DH密钥交换算法

SSH的原理,是基于RSA非对称加密,RSA是基于大数的因式分解数学难题,下面要提到的DH密钥交换算法则是基于有限域上的离散对数难题。

DH算法是一种密钥协商算法,只用于密钥的分配,不用于消息的加解密。它提供了一种安全的交换密钥的方式,通过交换的密钥进行数据的加解密。就像SSH原理中,口令的交换,不过DH算法更安全。

我们举个例子来进行说明,假设有A、B两方,A作为发送者,B作为接收者。通过下面的几个步骤就可以构建出一个只属于双方的密钥口令,如下:

首先A、B双方,在通信前构建专属于自己的密钥对,假设分别是公钥A,私钥A,公钥B,私钥B;

A将自己的公钥A暴露给B,B通过私钥B和公钥A经过一定的运算产生出本地的密钥B;

同样,B将自己的公钥B暴露给A,A通过私钥A和公钥B经过一定的运算产生出本地的密钥A;

最后,这个算法有意思的一点就是,密钥A和密钥B是一致的,这样A、B双方就拥有了一个属于双方的“秘密”口令;

DH算法的产生是,对称加密向非对称加密的过度,为后续非对称加密的产生和发展奠定了基础。

SSH 生成 ssh-keygen

# simple
ssh-keygen -t rsa
# 指定密钥类型和注释
ssh-keygen -t rsa -C "your_email@example.com"

运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

命令完成后,在~/.ssh/目录下会生成两个新文件:id_rsa.pub和id_rsa。前者存放你自己的公钥,后者存放你自己的私钥。

参数:

  • t:指定要创建的密钥类型。
  • C:添加注释;
  • b:指定密钥长度;
  • e:读取openssh的私钥或者公钥文件;
  • f:指定用来保存密钥的文件名;
  • i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
  • l:显示公钥文件的指纹数据;
  • N:提供一个新密语;
  • P:提供(旧)密语;
  • q:静默模式;

SSH 添加

# 方法一
# 拷贝到目标主机
scp id_rsa.pub 用户名@Ip地址:路径
# 登录目标主机,把公钥添加到authorized_keys
cat id_rsa.pub >> authorized_keys

# 方法二(推荐)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@your_ip

远程机器的.ssh目录需要700权限,authorized_keys文件需要600权限。(如果有root权限可忽略)

chmod 700 /root/.ssh
chmod 600 /root.ssh/authorized_keys

SSH 使用

ssh root@ target ip

配合 iTerm 使用完美组合。

分享到