免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2156 | 回复: 2
打印 上一主题 下一主题

[系统安装] 面试中经常问到的ssh原理而不是配置过程 [复制链接]

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-17 18:45 |只看该作者 |倒序浏览

--http://zhaochj.blog.51cto.com/368705/1602279

引子:
    第一次接触到SSH,也是第一次接触到Linux(Unix Like)系统,时间上说不上来了,SSH算得上是Linux系统的的一个标准配置,对SSH的印象,它就是一种远程连接的工具,有了它就能安全的与远程主机进行连接。
(一)、什么是SSH   
    SSH的全称是Secure Shell,简单说来ssh是一种安全的外壳协议,用于两个计算机间安全的远程登陆,说它安全,是因为ssh采用公钥加密的机制。最开始时用作远程管理的工具是telnet,这个协议工作时在网络上传输的数据全是明文,出于安全性的考虑,此协议的使用率越来越少。而ssh的安全性使用它成为一种互联网上远程登陆主机的解决方案。在windows系统上常用到的有Putty、SecureCRT、XManager中的Xshell工具,而XManager工具是我见到的IT工作者中使用频率极高的一个工具,在windows上好像没有ssh协议的服务器端的实现,ssh协议的实现也分为商业的实现和开源的实现,在这里将是对ssh协议的一个开源实现的学习与记录。Openssh即是Linux系统下开源的实现,它开放且免费。
(二)、ssh工作原理
说ssh是种安全的协议,是因为它采用公钥加密。用主机A连接主机B来说明这个过程:
1、主机A向主机B发起登陆请求;
2、主机B向主机A发送公钥文件;
3、主机A把登陆密码用接收到的公钥加密后发送给主机B;
4、主机B用自己的私钥解密加密信息,得到登陆密码;
5、主机B验证密码的正确性,正确则让其登陆,否则则断开。
(三)、中间人攻击(Man-in-the-middleattack)
    基于公钥加密这种验证方式看起比较完美,登陆密码的传输都是经过公钥加密处理,即使被恶意劫持,只要私钥文件没有被泄露,那也不能解密加密信息,密码的保密性得到保障。但这种看似完美的工作方式也有其致命的弱点,如果主机B是黑客伪装的,他接收到主机A的登陆主机B的登陆请求,用自己的公钥发送给主机A,而主机A很难辨别主机B的真伪,黑客就可以采取这种方式获得主机B正确的登陆密码,这就是有名的中间人攻击(Man-in-the-middleattack)。
    要想应对中间人的攻击,则需避免登陆时输入用户口令的操作,ssh中的认证方式有两种,一种是基于口令的方式,另一种是基于公钥的认证方式,后者就能在用户不输入口令的情况下登陆主机。
(四)、配置文件
系统环境:
[root@bogon~]# cat /etc/redhat-release
CentOSrelease 6.4 (Final)
[root@bogon~]# uname -m
x86_64
先看一下系统中安装openssh所用的安装包:
[root@bogon~]# rpm -qa *ssh*
openssh-5.3p1-84.1.el6.x86_64
openssh-clients-5.3p1-84.1.el6.x86_64
libssh2-1.4.2-1.el6.x86_64
openssh-server-5.3p1-84.1.el6.x86_64
可以用“rpm -ql 安装包名称”命令来查看各个安装名生成的目录结构,如下:
1
[root@bogon~]# rpm -ql openssh-clients
    对于openssh,我们需要关注的配置文件分为两类,一类是公共配置文件,另一类是私有配置文件。公共配置文件又分为服务端的配件文件和客户端的配置文件。
/etc/ssh/sshd_config   #服务端配置文件
/etc/ssh/ssd_config    #客户端配置文件
~/.ssh/*               #私有配置文件
我们主要关注的是服务端的配置文件和私有配置文件。
(五)、认证方式
    ssh支持两种认证方式,一种是基于用户名与口令的认证,另一种是基于密钥的认证。
5.1基于用户名与口令认证:
    客户端通过输入用户名与用户登陆密码的方式完成远程登陆,虽说是要求输入用户名及密码来验证,但ssh也会涉及到公钥的发送,即远程主机收到用户远程登陆请求时会把自己的公钥发送给用户端。     在windows下以ssh的方式登陆linux主机时,以xmanager为例,当用xmanager中的xshell第一次登陆linux主机时会有以下的提示:
wKiom1SyhQuByfgHAAEnvAREnkI324.jpg
大致意思就是用户包要连接的主机在用户本地的存储key的数据库中没有存储,主机是不可信任的,并且给出了远程主机公钥的摘要信息,是否要断续的连接此主机?那怎样来验证我所要连接的主机(192.168.0.201)是真实的,不是一个伪装的主机,避免中间人攻击。当点击“Accept&Save”,那xshell会把远程主机的公钥信息保存下来,在这里可以查看到:
wKioL1SyhffyvgOaAALSKi4a1RY361.jpgwKiom1SyhVXjDOKQAAHPjgrJGOw371.jpg
应对中间人攻击,SSH有2种方法应对,一是远程主机把自己的公钥拿到CA处做认证,申请一个数字证书;二是远程主机把自己公钥的指纹信息公布出来,比如公布在网站上,大家都可查看到公钥的指纹信息。这样用户在登陆时就可以鉴别主机的真伪了。提取主机的指纹信息的方法如下:
[root@Server-A ~]# ssh-keygen -lf/etc/ssh/ssh_host_dsa_key.pub
102439:61:e5:80:e8:09:b3:83:10:39:c8:b4:5e:ca:45:7e /etc/ssh/ssh_host_dsa_key.pub(DSA)
远程主机可以把这个采用dsa算法的指纹信息发布在一个网站上,那我用xshell去远程连接时就可对比一下指纹信息是不是一样,如果是一样的那就能证明我连接的是真实的主机。
在linux下用ssh方式登陆另一linux主机时,如果第一次登陆会有如下的提示:
[root@Server-A~]# ssh 192.168.0.201
Theauthenticity of host '192.168.0.201 (192.168.0.201)' can't be established.
RSAkey fingerprint is 4c:a3:2f:29:69:86:f6:0f:38:25:8c:7c:7c:3b:d5:91.
Areyou sure you want to continue connecting (yes/no)?
表示的意义与用xshell登陆时的提示相同,输入“yes”,再输入远程主机的口令即可登陆,登陆成功后本地主机会生成“~/.ssh/known_hosts”文件,这文件里保存着远程主机的公钥信息,这样下次再远程登陆时就不需要发送公钥信息了,直接输入口令即可。
5.2 基于公钥的认证:
    基于用户口令的认证方式每次都要求用户提供正确的口令,比较麻烦,且增加了口令泄露的机率。而基于公钥的认证则不需要用户输入口令即可完成远程登陆。这种认证方式是这样工作的:用户把自己的公钥存储在远程主机上,在登陆时,远程主机向用户发送一段随机字符串,用户用自己的私钥加密这段随机数字,并把加密后的信息发送给远程主机,远程主机用事先存储的公钥来解密这个数据,如果解密成功,则说明请求登陆的用户是可信任的,这样就直接允许用户登陆,而不要求输入密码了。这种认证方式需要把用户自己的公钥保存到远程主机上。若没有现成的公钥,那就生成:

[root@Server-A~]# ssh-keygen -t rsa
Generatingpublic/private rsa key pair.
Enterfile in which to save the key (/root/.ssh/id_rsa):
Enterpassphrase (empty for no passphrase):
Entersame passphrase again:
Youridentification has been saved in /root/.ssh/id_rsa.
Yourpublic key has been saved in /root/.ssh/id_rsa.pub.
Thekey fingerprint is:
9b:ef:2c:6a:92:05:c7:f4:4b:b8:4e:b4:ce:05:2f:0croot@Server-A
Thekey's randomart image is:
+--[RSA 2048]----+
|                 |
|      .         |
|     o o        |
|    E * o       |
|     * *S.      |
|      B +o      |
|     B oo       |
|    o = .o      |
|     o.. o+     |
+-----------------+
[root@Server-A~]# ls .ssh/
id_rsa  id_rsa.pub known_hosts
此时在家目录下的“./ssh”目录下生成了两个文件,一个id_rsa(私钥文件),id_rsa.pub(公钥文件)。接着把公钥文件拷贝到远程主机:
1
[root@Server-A ~]# scp .ssh/id_rsa.pub 192.168.0.201:/root/.ssh/authorized_keys
这里的“authorized_keys”这个文件名不能更改,这是由“/etc/ssh/sshd_config”文件定义的。
测试一下能否不输入密码就能远程登陆Server_B主机:
[root@Server-A ~]# ssh 192.168.0.201
Address 192.168.0.201 maps to bogon, butthis does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[root@Server-B ~]#
没错,成功了,但有报告信息,这是因为在/etc/hosts文件里没有增加两主机的映射关系,增加就可以了,在两主机中的“/etc/hosts”文件中都增加以下两行:
[root@Server-A ~]# echo"192.168.0.200  Server-A">> /etc/hosts
[root@Server-A ~]# echo "192.168.0.201  Server-B" >> /etc/hosts
上边用“scp”命令直接把主机的公钥文件拷贝到远程主机用户家目录下的“root/.ssh/authorized_keys”,其实还有一个更好的方法,ssh为我们提供了一个客户端工具,即“ssh-copy-id”,这个工具能将本地主机的公钥自动拷贝到远程主机上生成“authorized_keys”文件,且会让这个文件的权限为“600”这样更为安全,此命令的用法如下:
[root@Server-A ~]# ssh-copy-id root@192.168.0.201
建议用这个命令来实现无密码公钥登陆,因为用“scp”命令把公钥拷贝到远程主机后,不会把authorized_keys文件的权限修改成“600”,在某些linux版本下是无法实现基于公钥登陆的。
    用xshell这个神器也可实现基于公钥的认证,方法与在linux上类似,只是连接主机成了windows下的了,方法如下:
1、打开密钥生成向导工具
wKiom1SyhfHimh0QAANUYQESTuc230.jpg
2、选择密钥的类型与加密长度
wKioL1SyhuzT9UEdAAHEx4lGmm8610.jpg
3、直接下一步
wKioL1SyhwzjYVdhAAHZ6TvAuxM354.jpg
4、下一步
wKiom1Syhm6i5a3FAAF89fu-CNY691.jpg
5、导出公钥信息
wKioL1Syh1XC6kMXAAIcF_2QQyI268.jpg
6、完成
wKiom1SyhrKgiFYWAADIkqbIMQI577.jpg
这样就生成了一个“id_rsa_1024.pub”公钥文件,把这个公钥文件上传到远程主机,并把公钥信息追加到“~/.ssh/authorized_keys”。
最后配置xshell使用密钥方式登陆服务器:
1、打开Xshell,点击“New”按钮,弹出“NewSession Properties”对话框,在“Connection”栏目中,填写好相关信息,如下图:
wKioL1Syh9TSuaAqAAQBbJDaakk199.jpg
2、在“Authentication”中填写认证方式和私钥,如下图:
wKiom1Syhy_DfwnHAAKGBvk_kGs112.jpg
这样设置好后,也可以基于密钥登陆远程主机了。


总结
密码认证:两个人进行交易,接头,但是怎麽才知道对方是接头人,卖家要求买家说出暗号,卖家听到暗号确认是买家,但是可能隔墙有耳窃听你的暗号,下次再进行交易的时候,可能有人假扮买家
密钥认证:买家和卖家碰面,卖家拿出一张纸,在上面出了一道算法题(随机字符串),买家根据预先跟卖家约定好的算法,解出这道题目
进行交易,即使隔墙有耳,或者看到答案了,但是因为窃听人不知道具体算法是什么,卖家改了一道题目,窃听人就解不出来了,但是真正的买家依然可以根据算法解出来

涉及到的rpm包和文件
/etc/ssh/ssh_host_dsa_key.pub
~/.ssh/known_hosts
./ssh/authorized_keys
./ssh/id_rsa
./ssh/id_rsa.pub
openssh-5.3p1-84.1.el6.x86_64

论坛徽章:
8
操作系统版块每日发帖之星
日期:2016-01-11 06:20:00操作系统版块每日发帖之星
日期:2016-01-12 06:20:00每日论坛发贴之星
日期:2016-01-12 06:20:00操作系统版块每日发帖之星
日期:2016-01-13 06:20:00每日论坛发贴之星
日期:2016-01-13 06:20:00操作系统版块每日发帖之星
日期:2016-01-14 06:20:0015-16赛季CBA联赛之广夏
日期:2016-01-16 23:04:54IT运维版块每日发帖之星
日期:2016-01-17 06:20:00
2 [报告]
发表于 2016-01-17 20:21 |只看该作者
顶贴233333

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
3 [报告]
发表于 2016-01-19 16:12 来自手机 |只看该作者
带有后门的免费加密技术,是nsa参与布局的迷信项目
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP