在Linux上工作,ssh是必须要了解的技术方法。它可以建立起多台主机之间的安全的加密传输,以进行远程的访问、操控、传输数据。
ssh是什么?
SSH為Secure Shell的縮寫。為建立在应用层和传输层基础上的安全协议。
传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。 而SSH是目前较可靠,專为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透過SSH可以對所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。 SSH之另一項優點為其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的「通道」。 了解这么多就好了,其实ssh连接也就是可以理解成经过加密的远程访问啦。
ssh连接的验证、加密方式
ssh连接是CS模型(客户端-服务器),客户端发出连接申请,服务器对客户端进行验证,再考虑是否接受连接申请。
ssh的安全加密方式的理论基础是非对称加密体系。而非对称加密中,常见的一种就是RSA加密算法。在使用ssh,务必先弄清楚非对称加密和rsa的算法流程。详情参见RSA加密算法。
ssh有两种级别的安全验证:账户口令验证、rsa加密验证。详细参数,可以在sshd_config配置文件中设置(Ubuntu是/etc/ssh/sshd_config,mac下是/etc/sshd_config)
账号口令验证
直接输入所要登陆的用户的口令是默认的方式。不需要修改配置文件。
如果直接从客户端将用户密码传输到服务器,那么密码信息很容易被中间人截获,从而实现重放攻击。ssh的实现方式是:
1.客户端向ssh服务器发出请求,服务器将自己的公钥返回给客户端;
2.客户端用服务器的公钥加密自己的登录密码,再将信息发送给服务器;
3.服务器接收到客户端传送的密码,用自己的私钥解码,如果结果正确,则同意登录,建立起连接。
这种方式还是有漏洞的,中间人可以假扮成服务器,骗取客户端的密码。
RSA加密验证
RSA加密验证方式,充分利用了非对称加密体系的优势,不需要在网络传输密码,完全杜绝了中间人攻击的可能。步骤如下:
准备工作:
1.客户端先使用 ssh-keygen 命令,生成私钥和公钥。按照默认配置,私钥会被保存在~/.ssh/id_rsa中,公钥则在~/.ssh/id_rsa.pub中。(一般别修改这里的文件)
2.客户端通过安全的方式将公钥发送给服务器。在服务器端,将客户端发的公钥写入到~/.ssh/authorized_keys文件末尾。
建立连接
1.客户端发出申请。服务器产生session密钥对,返回通过对应客户端的公钥加密后的session公钥。
2.客户端用自己的密钥解密信息,得到session公钥。
3.之后的数据交互,都通过对方方公钥加密,对方收到信息后,用其私钥解密,实现安全加密过程。