ssh密钥原理
Posted Hu_ny
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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配置,比如下面的配置:
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、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
作者:Harry66
以上是关于ssh密钥原理的主要内容,如果未能解决你的问题,请参考以下文章
Linux SSH 基于密钥交换的自动登录原理简介及配置说明