SSH (Secure Shell)
SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH采用面向连接的TCP协议传输,应用22号端口,安全系数较高。
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
服务端
服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
这也就意味着,ssh并不只是一个能够提供远程登录的协议,其不需要额外使用ftp进行文件的传输,而是可以通过内置的sftp软件来实现文件的远程传输。
执行流程
SSH的执行流程是这样的:
- 远程Server收到Client端用户的登录请求,Server把自己的公钥发给用户。
- Client使用这个公钥,将密码进行加密。
- Client将加密的密码发送给Server端。
- 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
- 若验证结果,给Client相应的响应。
SSH无法防范中间人攻击(中间人伪造服务端发送假的公钥),因为没有CA对公钥进行公证。
安全认证级别
ssh 提供两种级别的安全认证:
- 基于口令的安全认证。
- 基于密钥的安全认证。
前者有隐秘的安全风险,不多赘述。
对于基于密钥的安全认证,首先服务器需要持有客户端的公钥以做比对,私钥存放在客户端中,当客户端想要登录时,首先使用私钥加密公钥,发送给服务端,服务端根据公钥解密得到与存放的公钥本身进行对比,从而完成认证过程。客户端发送的通过私钥加密的信息相当于是对客户端本身所作的签名。