ssh免密登陆原理与实现

做为开发者,所开发的每个应用在成型后都须要部署,虽然咱们使用着各式各样的部署工具,可是其背后最本质的东西彻底同样,即是如何与服务器交互,而交互的第一步便涉及到登陆。算法

一. 认识sshshell

SSH(Secure Shell),译作“安全shell”,如何作到安全?即是经过加密算法将须要传输的数据进行处理后,经过TCP传输,在两端之间经过密文交互达到安全目的,因此它的本质即数据的加密。数据库


SSH在目前一共有两个不兼容的版本,区别在于各自采用的加密方式不相同。SSH1使用了在加密对称加密秘钥的时候使用了非对称加密算法(RSA), 使用了循环冗余校验码(CRC)来保证传输数据的完整。SSH2则使用了新的对称加密算法和替代RSA加密秘钥的算法,而且使用散列值(HMAC)算法替代CRC来保证传输数据的完整。vim

二. SSH认证安全

SSH的用户认证方式有两种,第一种是帐户密码登陆,即你须要链接的远程服务器某一个用户与密码,比较经常使用,也比较简单。第二种是公钥验证受权登陆,这一种认证较为复杂,可是配置好后其后续操做将十分便捷,本次也主要梳理该种认证方式原理及其流程。bash


三. 免密登陆服务器

1. 免密本质ssh

若是将输入密码登陆比做拿钥匙开门,那么免密登陆能够理解为刷脸或者刷指纹开门,而刷脸和录指纹的操做即是你在此以前已经在开门认证的可信任数据库中录下来,在录下来以后才体会到开门不用钥匙便捷。因此,免密登陆的前提就是远端的服务器可以认识你的机器,而你的机器“刷脸”(免密)进门就须要把它的“脸”(公钥)放到远端的服务器的可信列表里。工具


2. 实现ui

a. 生成公私钥

# 生成秘钥
ssh-keygen -t rsa -C “your_email@gmail.com”复制代码

b. 将本地的公钥上传至远程服务器的用户信任列表

# 将公钥id_rsa.pub同步至服务器(10.11.xx.xx)地址的user用户下
ssh-copy-id -i ~/.ssh/id_rsa.pub  user@10.11.xx.xx复制代码

c. 检查远程服务器可信任列表

cd ~/.ssh/
# 查看可信任公钥列表里,存在你的公钥
cat authorized_keys复制代码

d. 免密验证

ssh user@10.11.xx.xx复制代码

e. 别名配置

因为ip是一段无序的数字,要是不记在内心,则须要每次登录服务器都翻笔记找对应ip,是比较费劲的,这时候能够给它起一个好记的别名,好比你的服务器在美国,能够叫usa_server,当你连接它的时候直接ssh别名就能够了,仅须要在你本地简单配置一下便可。

# 进入.ssh
cd ~/.ssh/
# 新建config
vim config
# 添加如下内容 
Host usa_server  
HostName 10.11.xx.xx  
User user  
Port 22
# 保存
# ssh别名连接验证
ssh usa_server复制代码


四. 认证原理

1.输入密码(口令)验证


用户在客户端ssh远程服务器,远程服务器将本身的公用密钥下发至客户端的~/.ssh/known_hosts,客户端将使用该公开密钥来加密数据,远程服务器使用本身的私有密钥来解密数据,从而实现加密访问过程。

2. 免密登陆(秘钥)验证

首先在客户端建立一对密匙,ssh-copy-id把公钥放在远程服务器的可信任列表中cd ~/.ssh/authorized_keys。

当客户端SSH链接服务器时,客户端携带着公钥向服务器发出连接请求,远端服务器收到请求后,在 ~/.ssh/authorized_keys信任文件里比对该公钥是否存在,若是对比成功,远端服务器则使用该公钥加密一个随机字符串(challenge),而后发送给客户端。客户端接收到该服务器回来的请求后,将随机字符串(challenge)用本身的私钥进行解密,以后再将解密后的结果传给远端服务器,远端服务器对比传来的字符串是否一致,一致则创建链接。


3. 两种方式简单比较

从原理层面上就可看出,第一种验证方式相比于第二种的步骤稍微简单一些,即表明第一种在链接时更快一些。可是第二种方式则更加安全一些,由于第一种方式并不能彻底保证你所链接的机器就是你想链接的机器,存在“中间人攻击”的风险。

如上内容均为本身总结,不免会有错误或者认识误差,若有问题,但愿你们留言指正,以避免误人,如有什么问题请留言,会尽力回答之。若是对你有帮助不要忘了分享给你的朋友或者点击右下方的“在看”哦!也能够关注做者,查看历史文章而且关注最新动态,助你早日成为一名全栈工程师!

相关文章
相关标签/搜索