在上一期我们说到如何玩弄openssl,不过这一期讲的是openssh,新手朋友们可别搞混了,openssh和openssl没有“五分钱”关系!
openssh是基于ssh协议开发的一款开源的程序实现使用ssh远程登陆你想操控的站点的一款工具!说得有点绕口,好吧!首先说说在没有ssh这个协议之前人们使用的telnet协议作为远程登陆的工具。
telnet是一个古老的协议,当时网络情况并不是很好能够远程进行通讯就万事大吉了,而且那时候也没有互联网!所以telnet最大的缺点就是不能加密进行通讯,所有的通讯(包括登陆的用户名和密码)都是明文传输。在这个大型互联网社会的森林里(暗藏着这么多野兽!)不加密通讯咋行?
ssh的代替telnet的作用就是能够进行加密通讯进行传输,ssh到现在一共两个版本:
- V1:基于CRL-32做MAC(消息认证码),现在已经确定不安全(加密算法被攻破),容易遭到中间人攻击
- V2基于双主机协议选择安全的MAC(这个MAC非物理地址的意思)方式;基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证!
ssh默认监听在tcp/22端口上,当然默认端口可不是什么好事情后面肯定得进行修改!
说完了ssh协议看看有哪些程序能够给我们提供给予ssh协议的服务,大多数情况下使用的当然是openssh,不过还有一个轻量级(合适用在嵌入式领域)的程序叫做:dropbear!
不过这一期肯定说说关于openssh的使用咯!
openssh分为client端和server端,首先说明client的玩法:
默认的openssh客户端的配置文件在/etc/ssh/ssh_config,先来看看配置文件:
后面的部分我也没有截取,因为大多都是注释的,因为客户端文件其实没有必要进行修改,比如默认链接服务器的端口等!其实需要修改的配置文件在openssh的服务器端!
在openssh客户端中有两种办法可以实现远程登陆(其实实现ssh协议的程序都可以),第一种就是账号密码的方式、第二种就是给予密钥认证的方式,关于第二种我们稍后说!
基于账户密码进行认证:
语法格式:ssh [USER@]HOST [‘COMMAND’]
USER@ 指明用户名也可以使用-l USER代替。如果不指明用户则按照本机的用户作为用户名!
-p PORT 登入远程主机的端口
-x 支持x11(图形)转发
-Y 支持信任的X11
注:如果使用客户端ssh的后跟COMMAND可以直接执行命令,无需登陆远程主机!
基于密钥的认证:(使用openssh程序来远程登陆)
实验主机:一共两台,一台是客户端:172.16.1.10,还有一台是服务器端为:172.16.1.20
第一步:在客户端(172.16.1.10)生成一个密钥对(公钥和私钥)这个可以使用openssh自带的生成:
看到了不?不过这里说明一下-f代表了指明文件存放位置和文件名,后面会让我们输入密钥密码,这个可以不输入按两下回车跳过,不过在企业环境严重建议给予密码!!!后面生成密钥对的时候会告诉你路径(画红线的就是)我放在的是家目录下,大家了一驶入ls -lh查看自己的公钥和私钥!
第二步:将自己客户端创建的公钥传送给远程服务器(172.16.1.20)对应的用户家目录,最好创建好家目录的.ssh目录!
看这样就算创建完毕了,接下来就是把公钥送过去!!
第一次传送会有提示,打YES即可,然后在服务器端(172.16.1.20)中可以看到这个公钥文件传送过来了!
最后一步就是更改服务器端.ssh中把公钥的内容传送给authorized_keys文件:
就这样就行了,不过注意的是:不要使用覆盖重定向”>”否则如果原先有公钥的话会被覆盖!
接下来当然要试试远程登陆了,执行ssh root@172.16.1.20即可:
啥?还得让我属于密码?哪里做错了?好像…真心没做错啊!!!这个问题其实在写博客之前确实困扰过我!后来我在看客户端配置文件的时候发现了!其实加上一个条目即可!!!(还知道openssh客户端配置文件在哪不?不知道看前文)
看到红线部分了不?加上这么一条即可,记住文件位置是你生成密钥对的私钥名字,如果生成的是test.ssh,这边的路径应该就为~/.ssh/test.ssh!可别照抄哦,然后就能顺利登陆了。其实identity file 就是身份认证文件,这边只是指明了默认的id_rsa!所以自己自定义的不行!
好了愉快的登陆了!
成功搞定,这个是openssh的利用密钥对来登陆,客户端持有私钥,而服务器端使用公钥!如果使用的是xshell putty等windows ssh客户端,还有客户端命令和服务器端,我下次来讲解!
Comments