ssh问题、原理及diffie hellman算法
1、普通用户无法使用证书登录:原因是权限设置问题
将.ssh目录设为700,authorized_keys设为600即可。
2、查看ssh支持的算法
ssh -Q help
ssh -Q kex/key/mac/cipher
3、查看sshd当前配置的算法(运行时)
sshd -T | grep kex/cipher/key
4、使用特定的kex 或者 hostkey进行ssh登录
ssh -o kexalgorithms=xxxx -o hostkeyalgorithms=xxx users@x.x.x.x
标准的df算法是:diffie-hellman-group-exchange-sha1
5、diffie-hellman算法
公共参数:p质数 g底数
client private temp_key: x
server private temp_key: y
客户端计算:
e=g^x mod p
服务器计算:
f=g^y mod p
双方交换(e,f)
客户计算:
share_key=f^x mod p
服务器计算:
share_key=e^y mod p
计算过程只换底数。x和y的取值为[2..p-2] 好象是这样
说明:diffie-hellman算法有很多版本,每一种算法都不一样。用wireshark抓包时,如果算法不一样,算法协商后的exchange 阶段的包也不一样
6、ssh算法协商阶段,算法选择的原则
以客户端第一个匹配的值为准。
7、ssh大致工作原理:
ssh的安全性主要体现在:1)全程对数据包进行对称加密——cipher指定 2)所有数据包为了保证完整性,都有hash值(md5或sha) ----mac指定 3)可选压缩算法,节省带宽
4)对要连接的主机是否是自己要连接的主机进行确认,理论上讲应该采用CA认证,但考虑实际场景,都是采用对主机的public key的指纹进行人工确认的方式。--hostkey
ssh交互中包的格如下:
在正式进行交互之前,ssh必须首先协商出这个对称加密用的密钥。这里采用diffie hellman算法,也就是kex。
(需要确认) hostkey应该是指的 公钥文件采用的哪种算法:ssh-rsa,还是 dss等等。
8、SSH大致工作原理:
第一阶段:TCP握手---双方发送version信息---双方进行算法通告(五个算法:kex , key ,cipher, mac, zip )--- 各自选择算法 -- 进入DF阶段 -- 各自产生share_key后,彼此发送 new key消息
第二阶段:进入用户验证阶段,包括用户名/密码验证方式及证书验证方式
第三阶段:进入正式交换阶段,主要是channel ID及进程ID
以上三个阶段,除了第一个阶段的前半部分(new_key之前)是明文以外,后面的过程都是密文
9、man sshd_config
这里面有关于sshd_config和ssh_config的详细用法。需要注意的是:客户端并不是把支持的算法都发送给服务器,客户端也有默认算法,可以通过ssh -vvv进入调试模式,看调用哪个配置文件。
如果客户端与服务器连接失败,不要急于换个软件再试。先通过调试模式看看双方都采用了什么算法,如果不匹配,用-Q看看自己支持的全部算法,然后用-o选择一个服务器支持的算法,即可成功。
连接不成功,通常是kex或key无法协商一致造成的。cipher通常是AES/DES,这个部分出现的概率要低一些。当然,最好的方法是将所算法全部人工匹配一下。wireshark/科来capsa都能详细的解出各种算法
最新文章
- 魅族M8时期写过几个app,纪念一下曾经的自己
- [转]NopCommerce How to code my own payment method
- sublime安装package control组件
- Beta项目冲刺 --第一天
- svg学习(一)
- egit - not authorized
- 结构体用于map,set时要重载运算符<;
- JAVA操作数据库插入中文表中显示乱码的解决方法
- 【插件】WordPress缓存最佳组合:DB Cache Reloaded Fix + Hyper Cache
- ASP.NET批量下载服务器端指定目录文件
- 性能测试分享:Jmeter多机协作原理
- c++(排序二叉树删除)
- ffmpeg命令行循环推流
- apache设置跨域请求
- js 动态添加class封装(es6语法)
- vue.js 自带阻止默认事件 阻止冒泡
- 【学习总结】C-翁恺老师-入门-第3周<;循环>;
- WEB框架本质和第一个Django实例
- [原]windows sdk版本不对
- 微信小程序——3、逻辑js文件
热门文章
- Qt 一键部署脚本
- Mybatis开发之mapper代理实现自定义接口(常用)
- liunx设置QQ邮箱报警
- for in | for in 比较 解释 | 以后找知识点先从这里面搜索
- python的GIL全局解释器锁
- GrADS 读取NetCDF和HDF的ctl文件 SDF文件的描述文件
- 面试官:来说说 https 和 http 区别?
- .Net Core WebApi 控制器自动创建文件夹上传图片
- sap IUT255 Integration of SAP CRM and SAP IS-U_EN_Col62.pdf
- unity 变体 随手记