ssh密钥原理

最近使用jenkins远程拷贝的免密访问遇到不少问题,其中主要原因还是对ssh的加密解密不太熟悉,于是便有了这篇文章。

首先我们来了解什么是公钥和私钥。

私钥

服务器上经过rsa算法生成的私钥。与公钥是一对的密钥对,用于连接其他服务器用。

公钥

服务器上经过rsa算法生成的公钥。与私钥是一对的密钥对,用于连接其他服务器用。
将主机A的id_rsa.pub内容copy到B主机的authorized_keys文件中,这样A主机就能不通过密码连接到B主机。

说明:

● 每个用户都有一对私钥和公钥。
● 私钥用来进行解密和签名,是给自己用的。
● 公钥由本人公开,用于加密和验证签名,是给别人用的。
● 当该用户发送文件时,用私钥签名,别人用他给的公钥解密,可以保证该信息是由他发送的。即数字签名。
● 当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他看到。即安全传输。

.ssh目录介绍

目录~/.ssh/是用来存储SSH客户端和服务器一些配置文件的位置,这些文件包括:

  • authorized_keys,SSH服务器默认的公钥认证文件,服务器通过该文件配置可以使用该用户认证的用户证书。SSH证书认证就是客户端生成证书(私钥和公钥对),将公钥复制到该文件,每行一个证书。复制公钥时候可以使用ssh-copy-id命令或者直接手动配置authorized_keys文件即可。
  • id_*,包括id_rsa,id_dsa,id_ed25519,id_ecdsa等是保存在该用户下的证书私钥,用户通过SSH证书认证时候会自动搜索这些私钥进行认证。
  • id_*.pub 上述私钥对应的公钥,以.pub为后缀。
  • known_hosts 保存该主机连接过的远程服务器及其对应的主机公钥(用来对主机认证),再次连接到远程服务器如果公钥相同,则直接连接认证。如果没有,或者远程服务器有变化,会提示: 需要输入yes,确认才行。
  • config 文件用来配置本地ssh连接的一些项目,比如配置主机别名的,可以解决同一主机或者多台主机使用多个证书,就可以用config配置,比如下面的配置:
    image
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/git/github_id_rsa

Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/git/gitee_id_rsa

Host chongchong.com
HostName 112.34.6.71
Port 2222
User chongchong
IdentityFile ~/.ssh/id_ecdsa
ForwardX11 yes
Compression yes
TCPKeepAlive yes

前两个Host配置对github和码云使用不同的证书,后面一个Host对一台主机配置使用非默认的ssh端口、非默认当前用户以及一些启用一些ssh配置项目。
主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录

密码登录

通过密码进行登录,主要流程为:
1、客户端连接上服务器之后,服务器把自己的公钥传给客户端
2、客户端输入服务器密码通过公钥加密之后传给服务器
3、服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录

公钥登录

公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
1、客户端生成RSA公钥和私钥
2、客户端将自己的公钥存放到服务器
3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

posted @ 2022-07-22 08:53  Harry_666  阅读(410)  评论(0编辑  收藏  举报