SSH Explain

一直对SSH认识很模糊,只是简单的会用而已。今天抽空了解了一下SSH。
下文包含这几个部分:

  • SSH简介
  • SSH使用
  • SSH的连接
  • SSH源码(未完成)

SSH简介

SSH是Secure Shell的简称,是一项创建在应用层和传输层基础上的安全协议,为计算机的shell提供安全
的的传输和使用环境,由IETF的网络工作小组(Network Working Group)所制定。
传统的网络服务程序,如rsh、FTP、POP、Telnet其本质上都是不安全的;因为它们在网络上使用明文传
传输数据、用户账号和口令。很容易受到中间人(man-in-the-middle)方式的攻击。就是存在另外一个人活
或者机器冒充真正的服务器接收数据,然后在冒充用户把数据传给服务器。
而SSH是目前较为可靠,专为远程登录会话和其它网络服务提供安全性的协议。利用SSH可以有效防止远程
管理过程中的信息泄露问题。通过SSH可以对所有传输数据进行加密,也能够防止DNS和IP欺骗。
SSH另外一项优点是为其传输数据可以是经过压缩的,所以可以加快传输速度。SSH有很多功能,它既可
代替Telnet,又可以为FTP、POP甚至PPP提供一个安全的“通道”。
SSH并不只是远程shell管理,SSH包含以下组件:
The OpenSSH suite consists of the following tools:

* Remote operations are done using ssh, scp, and sftp.
* Key management with ssh-add, ssh-keysign, ssh-keyscan, and ssh-keygen.
* The service side consists of sshd, sftp-server, and ssh-agent.

SSH使用

SSH的使用较为简单,一般使用如下命令即可。

1
ssh hostname

完整的命令

1
ssh	[-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command]

SSH的连接

在客户端来看,SSH提供两种级别的安全验证,常用的是第二种。

  • 基于密码的安全验证,知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密
  • 基于密钥的安全验证,也就是你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。客户端向服务器发出请求,请求密钥安全验证。服务器在收到请求之后,在指定目录下(~/.ssh/authorized_keys)寻找公钥,然后把客户端发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密一段随机字符串并把它发送给客户端。

图:基于密钥的安全验证连接过程
ssh

在服务器端,SSH也提供安全验证。 在第一种方案中,主机将自己的公用密钥分发给相关的客户端,客户端在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确保数据的保密性。 在第二种方案中,存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了。在这种模式下,客户端必须访问认证中心然后才能访问服务器主机。

参考文档:
wikipedia ssh
openssh
archlinux ssh)