SSH是建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH 最初是 UNIX 系统上的一个程序,后来又迅速扩展到其他操作平台。SSH 在正确使用时可弥补网络中的漏洞。SSH 客户端适用于多种平台。几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行 SSH。
功能
传统的网络服务程序,如:ftp、pop 和 telnet 在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用 SSH,你可以把所有传输的数据进行加密,这样”中间人”这种攻击方式就不可能实现了,而且也能够防止 DNS 欺骗和 IP 欺骗。使用 SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH 有很多功能,它既可以代替 Telnet,又可以为 FTP、PoP、甚至为 PPP 提供一个安全的”通道”。
验证
从客户端来看,SSH 提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到 SSH 服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要 10 秒。
详细
如果你考察一下接入 ISP(Internet Service Provider,互联网服务供应商)或大学的方法,一般都是采用 Telnet 或 POP 邮件客户进程。因此,每当要进入自己的账号时,你输入的密码将会以明码方式发送(即没有保护,直接可读),这就给攻击者一个盗用你账号的机会—最终你将为他的行为负责。由于 SSH 的源代码是公开的,所以在 Unix 世界里它获得了广泛的认可。Linux 其源代码也是公开的,大众可以免费获得,并同时获得了类似的认可。这就使得所有开发者(或任何人)都可以通过补丁程序或 b u g 修补来提高其性能,甚至还可以增加功能。开发者获得并安装 SSH 意味着其性能可以不断提高而无须得到来自原始创作者的直接技术支持。SSH 替代了不安全的远程应用程序。SSH 是设计用来替代伯克利版本的 r 命令集的;它同时继承了类似的语法。其结果是,使用者注意不到使用 SSH 和 r 命令集的区别。利用它,你还可以干一些很酷的事。通过使用 SSH,你在不安全的网络中发送信息时不必担心会被监听。你也可以使用 POP 通道和 Telnet 方式,通过 SSH 可以利用 PPP 通道创建一个虚拟个人网络( Virtual Private Network,VPN)。SSH 也支持一些其他的身份认证方法,如 Kerberos 和安全 ID 卡等。
但是因为受版权和加密算法的限制,可以预计将来会有越来越多的人使用 SSH 而不是 Telnet 或者 POP3 等。
层次
SSH 主要由三部分组成:
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在 TCP/IP 连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当 SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希 H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
结构
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(安全文件传输)等其他的应用程序。
他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和 IP 地址再发送密钥给 SSH 的客户端,本地再将密钥发回给服务端,自此连接建立。SSH 1.x 和 SSH 2.x 在连接协议上有一些差异。
一旦建立一个安全传输层连接,客户机就发送一个服务请求。当用户认证完成之后,会发送第二个服务请求。这样就允许新定义的协议可以与上述协议共存。连接协议提供了用途广泛的各种通道,有标准的方法用于建立安全交互式会话外壳和转发(“隧道技术”)专有 TCP/IP 端口和 X11 连接。
SSH 被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过 inetd 上的 tcpd 来运行 SSH 进程,但是这完全没有必要。启动 SSH 服务器后,sshd 运行起来并在默认的 22 端口进行监听(你可以用 # ps -waux | grep sshd 来查看 sshd 是否已经被正确的运行了)如果不是通过 inetd 启动的 SSH,那么 SSH 就将一直等待连接请求。当请求到来的时候 SSH 守护进程会产生一个子进程,该子进程进行这次的连接处理。
应用
SSH 另类应用:用 ssh 做 socks5 代理
1. 下载 MyEntunnel。
2.下载 PuTTY,解压到 MyEntunnel 程序的目录下。
3.运行 MyEntunnel.exe,设置:SSH Server 里头填上 ssh ftp 的地址或 IP,填好用户名和密码,点 Connect,系统栏里面的小锁变成绿色就连接成功了。
4.设置浏览器。IE 是不支持 socks 代理的,用 firefox 好了,打开 firefox 的代理设置页,在 socks 主机处填上 127.0.0.1 端口填原先设置的,默认 7070。
Win 主机环境运行 SSH 命令的方法
对于 Win 主机用户,可以下载工具 putty 来进行 shell 管理。具体的命令依赖于登录到远端主机所使用的系统和 Shell。
一些常用的 shell 命令如下:
cd[目录名]转换路径
cd.. 返回上级目录
ls 显示当前目录下所有文件
rm[-r]-f[][文件名]删除文件,加[-r]可以删除文件下所有子文件,如 rm[ -r]-f [abc]删除 abc 文件夹及文件夹下的所有文件
tar -xzf [解压下载的压缩包]
unzip[文件名]解压文件
cp -rpf .A/* B 将 A 文件夹中的所有文件拷贝到其上级目录 B 中
wget(远程下载文件到服务器上)
扩展
SSH 协议框架中设计了大量可扩展的冗余能力,比如用户自定义算法、客户自定义密钥规则、高层扩展功能性应用协议。这些扩展大多遵循 IANA 的有关规定,特别是在重要的部分,像命名规则和消息编码方面。
SSH 采用面向连接的 TCP 协议传输 应用 22 号端口 安全系数较高。
启动方法
方法一:使用批处理文件
在服务器端安装目录下有两个批处理文件“start-ssh.bat”和“stop-ssh.bat”。运行“start-ssh.bat”文件就可以启动 SSH 服务,要停止该服务只要执行“stop-ssh.bat”文件即可。
方法二:使用 SSH 服务配置程序
在安装目录下,运行“fsshconf.exe”程序,它虽是 SSH 服务器的配置程序,但也可以用来启动和停止 SSH 服务。在弹出的“F-Secure SSH Server Configuration”窗口中,点击左面列表框中的“Server Settings”后,在右边的“Service status”栏中会显示服务器状态按钮,如果服务器是停止状态,则按钮显示为“Start service”,点击该按钮就可启动 SSH 服务,再次点击可停止 SSH 服务。
方法三:使用 NET 命令
在服务器端的“命令提示符”窗口中,输入“net start ″F-secure SSH Server″”命令,就可以启动 SSH 服务,要停止该服务,输入“net stop ″F-Secure SSH Server″”命令即可。其中“F-Secure SSH Server”为 SSH 服务器名,“net start”和“net stop”为 Windows 系统启动和停止系统服务所使用的命令。
启动了 SSH 服务后,一定要关闭 Telnet 服务,这样服务器就处在安全环境之中了,不用再怕数据被窃取。
SSH 安全技巧
SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H 最初是 U N I X 系统上的一个程序,后来又迅速扩展到其他操作平台。S S H 在正确使用时可弥补网络中的漏洞。客户端包含 ssh 程序以及像 scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。SSH 有很多非常酷的特性,如果它是你每天的工作伴侣,那么我想你有必要了解以下 10 条高效使用 SSH 的秘籍,它们帮你节省的时间肯定会远远大于你用来配置它们的时间。
服务器间跳转
有些时候,你可能没法直接连接到某台服务器,而需要使用一台中间服务器进行中转,这个过程也可以自动化。首先确保你已经为服务器配置了公钥访问,并开启了 agent forwarding,可以通过 2 条命令来连接目标服务器,不会有任何提示输入: $ ssh gateway gateway $ ssh db 然后在你的本地 SSH 配置中,添加下面这条配置: Host db HostName ProxyCommand ssh gateway netcat -q 600 %h %p 可以通过一条命令来直接连接目标服务器了: $ ssh db 这里你可能会需要等待长一点的时间,因为 SSH 需要进行两次认证,注意 netcat 也有可能被写成 nc 或者 ncat 或者前面还需要加上 g,你需要检查你的中间服务器来确定实际的参数。
省去用户名
如果你在远程服务器上的用户名和你本地的用户名不同,你同样可以在 SSH 配置中进行设置: Host www* mail HostName %h User simon 就算我的本地用户名是 smylers,我仍然可以这样连接我的服务器: $ ssh www2 SSH 会使用 simon 账户连接你的服务器,同样,Putty 可以保存这个信息在你的 session 中。
主机别名
你也可以在你的 SSH 配置中直接定义主机别名,就像下面这样: Host dev HostName 你还可以使用通配符来进行分组: Host dev intranet backup HostName %h Host www* mail HostName %h 在 Putty 中你可以为每个主机名保存单独的 session,然后双击建立连接(但是它可能没办法支持通配符)。
省略主机名
输入服务器的完整主机名来建立一个新的 SSH 连接实在是太乏味无聊了,尤其是当你有一组拥有相同域名但是子域名不同的服务器需要管理时。 或许你的网络已经配置了可以直接使用短域名,比如 intranet,但是如果你的网络不支持,实际上你可以自己搞定这个问题,而不用求助网络管理员。 解决办法根据你用的操作系统而略有差异,下面是我的 Ubuntu 系统的配置: prepend domain-search
然后你需要重启网络:$ sudo restart network-manager 不同的系统,这两条命令可能会略有差异。