一、远程连接协议;
telnet:是一种通用的远程登陆服务的标准协议和主要方式,它为用户提供了在本地计算机上完成远程主机工作的能力;telnet采用C/S架构,工作与23/tcp端口上,在CentOS6下,软件包主要为服务端telnet-server和客户端tennet,服务进程被被超级进程xinetd管理,禁止管理员直接登陆;在用户登录传输信息的过程中都是明文信息,无法保障安全,所以不建议用telnet。
ssh:Secure Shel,即安全外壳协议;SSH 为建立在应用层和传输层基础上的安全协议,ssh也采用C/S架构,工作与22/tcp端口上;ssh有两个版本,sshv1和sshv2;
sshv1:基于CRC-32做MAC;不安全,不推荐使用;
sshv2:基于双方主机的协商选择使用最安全的MAC方式,机密机制及MAC机制由双方协商选定;基于DH实现密匙交换,基于RSA或DSA实现身份认证,客户端通过检查服务器端的主机密匙来判断是否能够继续通信。
二、OpenSSH简述:
是一组用于安全地访问远程计算机的连接工具。它可以作为rlogin、rsh rcp以及telnet的直接替代品使用。更进一步,其他任何TCP/IP连接都可以通过SSH安全地进行隧道/转发。OpenSSH对所有的传输进行加密,从而有效地阻止了窃听、连接劫持,以及其他网络级的攻击。OpenSSH由OpenBSD project维护。
登录过程和使用rlogin或telnet建立的会话非常类似。在连接时,SSH会利用一个密钥指纹系统来验证服务器的真实性。只有在第一次连接时,用户会被要求输入yes。之后的连接将会验证预先保存下来的密钥指纹。如果保存的指纹与登录时接收到的不符,则将会给出警告。指纹保存在~/.ssh/known_hosts中,对于SSHv2指纹,则是~/.ssh/known_hosts2。
默认情况下,较新版本的OpenSSH只接受SSHv2连接。如果能用版本2则客户程序会自动使用,否则它会返回使用版本1的模式。此外,也可以通过命令行参数-1或-2来相应地强制使用版本1或2。保持客户端的版本1能力是为了考虑较早版本的兼容性。
OpenSSH的组成:
采用C/S架构;
Client:Linux下工具主要为ssh、scp、sftp,软件包为openssh-client;
Windows下ssh客户端工具有:putty、xshell、securecrt、sshshellclient;
Server:服务进程sshd,软件包为openssh-server;
三、OpenSSH客户端应用;
# yum install openssh-client :安装openssh客户端;
# /etc/ssh/ssh_config :配置文件
1、ssh:
命令语法:
# ssh [username@]host[-p PORT] [COMMAND]
# ssh [-l username] host [-p PORT] [COMMAND]
username@=-l username:指定登录远程主机的用户,不指定则使用本地当前用户尝试登陆,如果远程主机不存在此用户,会报错;
-p PORT:指定远程服务器端口,默认为22;
COMMAND:登录远程主机执行一次指定的命令并返回结果,不会停留在远程主机上;
2、scp:
利用ssh协议在主机之间实现安全文件传输的工具;
# scp SRC1... DEST
命令选项:
-r:递归,复制目录时使用;
-p:保持源文件的元数据信息,包括mode和timestamp;
-q:静默模式;
-p PORT:指定ssh协议监听的端口;
分两种情形:
1)、源文件在本机,目标为远程;
# scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere
2)、源文件在远程,本地为目标;
# scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere
3、sftp;
基于ssh的ftp服务:
# sftp USERNAME@HOST :登陆ftp;
四、openssh的服务端:
# yum install openssh-server :安装openssh客户端;
# chkconfig sshd on :sshd服务开机启动;
# service sshd start :启动sshd服务:
# sun –tnl | grep :22 :查看22/tcp号端口;
# /etc/ssh/sshd_config :配置文件
# /etc/rc.d/init.d/sshd :服务脚本
# /etc/sysconfig/sshd :脚本配置文件
# man sshd_config :查看配置参数
1、sshd认证方式:
1)、基于口令的认证;
即用户名和密码;
2)、基于密钥的认证
# ssh-keygen -t rsa :rsa算法生成密钥;默认密钥为id_rsa(私钥),id_rsa.pub(公钥);
-f /path/to/somefile:密钥文件保存位置;
-P ' ':指定oldpassword;
# ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST :传输自动验证密钥文件;
也可以公钥文件传输(scp)给远程主机,远程主机将公钥信息追加至指定用户~/.ssh/authorized_keys,授权远程登陆;
操作实例;
2、sshd最佳实践;
1)、不要使用默认的22号端口;
2)、不要使用protocol1;
3)、限制可登录的用户;
白名单:
AllowUserSUSEr1 user2 ...
AllowGroups grp1 grp2...
黑名单:
DenyUsers
DenyGroups
4)、设定空闲会话超时时长;
ClientAliveInterval 300
ClientAliveCountMax 0
5)、利用防火墙设置ssh访问策略;
6)、仅监听在特定的IP地址,而非本机所有的IP地址;
7)、使用强密码策略
# tr -dcA-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8)、使用基于密钥的认证;
9)、禁止使用空密码;
10)、禁止root用户直接登录;
11)、限制ssh的访问频度
12)、做好日志,经常分析;
更多OpenSSH相关内容可以查看以下的有用链接:
在Ubuntu Server 13.10系统中安装配置OpenSSH
通用线程: OpenSSH 密钥管理,第 1 部分理解 RSA/DSA 认证
RedHat安装OpenSSH和配置sftp锁定目录
OpenSSL 的详细介绍:请点这里
OpenSSL 的下载地址:请点这里