在计算机应用中,较常用的远程登陆工具有telnet和ssh。
telnet是“远古”时期的远程登陆工具,它在进行远程登陆的认证过程中都是以明文的形式进行telnet数据传输同样是以明文的形式进行的telnet的使用严重的威胁到的网络中的信息安全。
刚开始,网络都是小规模的存在,使用的人少之又少,所以安全问题并没有受到重视,但是随着网络的快速发展网络安全成为备受关注的问题,于是ssh诞生了。
ssh英文全程为Secure Shell,翻译成中文叫做安全的shell.ssh采用的是C/S架构,所以它有客户端程序和服务器端程序。ssh服务通过22端口来进行传输数据,并通过tcp封装数据,数据的传输以密文的形式进行,所以安全性得到了很大的提升但是ssh是一款商业软件,这并不符合大部分用户的使用需求,于是openssh出现在人们的视线中。
openssh 见名思意--开源的ssh。openssh 即是一款软件,也是协议.(ssh,sshd)sshd有两种认证方式:
1、基于口令的认证
2、基于密钥的认证sshd
两种认证方式,相对于telnet来说,在安全方面有了很大的提升。但是基于口令的认证方式,在本地主机和远程主机进行远程登陆时,用户帐号密码仍然需要通过网络传输。该认证方式无法避免第三方攻击,黑客通过抓取网络传输的数据包,破译该数据包,获取密码,然后冒充本地主机与远程主机通信,获取数据。所以推荐采用基于密钥的认证,该认证方式可以避免用户密码在网络中传输所带来的安全问题。
该方式还可以在第二次远程登陆时,不用在输入密码基于密钥的认证方式的实现:1、生成一对密钥
2、公钥以安全的方式传输至服务器端某用户的家目录下的.ssh/authorized_keys文件中
3、私钥由自己保管(放在家目录.ssh/)目录下
即使采用的这么多防护措施,仍然可能受到黑客的攻击,所以ssh不仅给传输的数据加密,并且在规定时间内更换加密密钥,防止,黑客暴力破解。在sshd的配置文件中,可以设置多种限制,例如:ListenAddress192.168.1.1:表示只给给IP地址的主机提供服务还可以设置,root无法直接远程登陆,设置最大链接,密码失效时间等。大大提高了数据远程传输的安全
实例:简单实现两台主机基于密钥的认证(本实验在物理--debian机和虚拟机--ubuntu中进行)
物理机ip地址:192.168.2.190虚拟机ip地址:192.168.2.1111、将虚拟机(ubuntu)的防火墙开放22端口(也可以直接使用iptables -F,清空所有规则,但是不建议这么做)
iptables -A INPUT -s192.168.2.0/24-d192.168.2.0/24-p tcp --dport22-m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -s192.168.2.0/24-d192.168.2.0/24-p tcp -sport22-m state --state ESTABLISHED -j ACCEPT
2、在物理机(debian)中生成一对密钥
ssh-keygen -t rsa(跳出的选项可以全部默认也可以根据个人需求自行填写,如果通过脚本生成密钥请man,查询选项)完了之后会在家目录的.ssh目录中产生两个文件id_rsa 和id_rsa.pub(该文件名可以自己命名,最好取名有意义)
3、将物理机中的公钥(id_rsa.pub)复制到虚拟机中的某用户的家目录的.ssh/authorized_keys文件中两种方法:
scpssh-copy-id
ssh-copy-id,
推荐使用ssh-copy-id直接自动的将密钥复制到.ssh/authorized_keys文件中scp需要自己指定位置实现:
ssh-copy-id-i ./id_rsa.pubusername@192.168.2.111scp ./id_rsa.pubusername@192.168.2.111:~/.ssh/authorized_keys
该实例的信任的是单项的,物理机到虚拟机建立基于密钥认证的关系,物理机ssh远程登陆虚拟机,二次登陆不需要密码但是,虚拟机到物理机没有建立该认证方式,所以无法进行密钥认证方式
脚本简单实现ssh密钥认证
#==============================================================
# File Name:openssh.sh# Author:qgf# Mail:qq.com# Created Time:2016年10月10日 星期一 #==============================================================
#!/bin/bash
echo-e"\e[33mssh基于密钥认证\e[0m"
echo-e"\e[33m请输入远程用户名\e[0m"
read-p''USERNAME"
echo-e"\e[33m请输入远程主机号\e[0m"
read-p''IPHOST"
ssh-keygen -t rsa-f~/.ssh/id_rsa -N''&> /dev/null
ssh-copy-id -i ~/.ssh/id_rsa.pub$USERNAME@$IPHOST&>/dev/null
ssh$USERNAME@$IPHOST