科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道SSH使用及协议分析

SSH使用及协议分析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SSH是一个用来替代TELNET、FTP以及R命令的工具包,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。SSH有两个版本,我们现在介绍的是版本2。

作者:ChinaITLab 来源:ChinaITLab 2008年6月11日

关键字: ssh

  • 评论
  • 分享微博
  • 分享邮件

  SSH是一个用来替代TELNET、FTP以及R命令的工具包,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。SSH有两个版本,我们现在介绍的是版本2。

  安装SSH

  具体步骤如下:

  获得SSH软件包。 (ftp://ftp.pku.edu.cn:/pub/unix/ssh-2.3.0.tar.gz)

  成为超级用户(root).

  # gzip –cd ssh-2.3.0.tar.gz |tar xvf –

  # cd ssh-2.3.0

  # ./configure

  注意,如果你希望用tcp_wrappers来控制SSH,那么在configure时需要加上选项“--with-libwrap=/path/to/libwrap/”,

  用来告诉SSH关于libwrap.a 和tcpd.h的位置。

  # make

  # make install

  和SSH有关的程序都放置在/usr/local/bin下,包括ssh,sftp,sshd2, ssh-keygen等。

  二、配置

  SSH的配置文件在/etc/ssh2下,其中包括sshd2的主机公钥和私钥:hostkey和hostkey.pub。这两个文件通常是在安装SSH时自动生成的。你可以通过下面的命令重新来生成它们:

  # rm /etc/ssh2/hostkey*

  # ssh-keygen2 –P /etc/ssh2/hostkey

  而ssh2_config 文件一般情形下无需修改。

  三、启动sshd2

  每个要使用SSH的系统都必须在后台运行sshd2。用手工启动:

  # /usr/local/bin/sshd2&

  可以在“/etc/rc2.d/S99local”中加入该命令,这样系统每次启动时会自动启动sshd2。

  四、用tcp_wrappers控制SSH

  安装SSH的站点可以用tcp_wrappers来限制哪些IP地址可以通过ssh来访问自己。比如,在/etc/hosts.allow中加入

  sshd,sshd2: 10.0.0.1

  那么只有10.0.0.1可以通过ssh来访问该主机。

  以上都是系统管理员完成的工作。下面我们说说普通用户如何使用SSH。

  五、基本应用

  每个用户在使用SSH之前,都要完成以下步骤:

  在本地主机(比如,local.pku.edu.cn)上生成自己的ssh公钥和私钥。命令如下:

  local# ssh-keygen

  Generating 1024-bit dsa key pair

  1 oOo.oOo.o

  Key generated.

  1024-bit dsa, teng@ns, Fri Oct 20 2000 17:27:05

  Passphrase :************ /*在此输入你的口令,以后访问这台主机时要用。

  Again :************ /*

  Private key saved to /home1/teng/.ssh2/id_dsa_1024_a

  Public key saved to /home1/teng/.ssh2/id_dsa_1024_a.pub

  生成的私钥和公钥(id_dsa_1024_a和id_dsa_1024_a.pub)存放在你家目录的~/.ssh2目录下。和用户相关的SSH配

  置文件都在~/.ssh2下。私钥由用户保存在本地主机上,而公钥需传送到远地主机的你自己的帐号的~/.ssh2下,如

  果你要用ssh2访问本地主机的话。

  在~/.ssh2下创建“identification”文件用来说明进行身份认证的私钥。命令如下:

  local:~/.ssh2# echo "IdKey id_dsa_1024_a" > identification

  3.同样地,在远地主机(比如,remote.pku.edu.cn)上完成上面步骤。

  4.将本地(local.pku.edu.cn)下你自己(这里是“teng”)的公钥(id_dsa_1024_a.pub)拷贝到远地主机

  (remote.pku.edu.cn)上你自己家目录下的.ssh2目录下,可命名为“local.pub”,一般用ftp上传即可。

  在远地主机上,你自己家目录的.ssh2目录下,创建“authorization”文件,其中指定用来进行身份认证的公钥文件。

  命令如下:

  remote:~/.ssh2# echo “Key local.pub” > authorization

  现在你可以从本地用ssh2登录到远地系统了。命令如下:

  local# ssh remote.pku.edu.cn

  Passphrase for key "/home1/teng/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,

  teng@ns, Fri Oct 20 2000 17:27:05":***********

  这时会要你输入你的ssh口令(Passphrase)。验证通过后,即登录到remote主机上。

  第一部分:协议概览

  整个通讯过程中,经过下面几个阶段协商实现认证连接。

  第一阶段:

  由客户端向服务器发出 TCP 连接请求。TCP 连接建立后,客户端进入等待,服务器向客户端发送第一个报文,宣告自己

  的版本号,包括协议版本号和软件版本号。协议版本号由主版本号和次版本号两部分组成。它和软件版本号一起构成形如:

  "SSH-<主协议版本号>.<次协议版本号>-<软件版本号>\n"

  的字符串。其中软件版本号字符串的最大长度为40个字节,仅供调试使用。客户端接到报文后,回送一个报文,内容也

  是版本号。客户端响应报文里的协议版本号这样来决定:当与客户端相比服务器的版本号较低时,如果客户端有特定的

  代码来模拟,则它发送较低的版本号;如果它不能,则发送自己的版本号。当与客户端相比服务器的版本号较高时,客

  户端发送自己的较低的版本号。按约定,如果协议改变后与以前的相兼容,主协议版本号不变;如果不相兼容,则主主

  协议版本号升高。

  服务器接到客户端送来的协议版本号后,把它与自己的进行比较,决定能否与客户端一起工作。如果不能,则断开TCP

  连接;如果能,则按照二进制数据包协议发送第一个二进制数据包,双方以较低的协议版本来一起工作。到此为止,这

  两个报文只是简单的字符串,你我等凡人直接可读。

  第二阶段:

  协商解决版本问题后,双方就开始采用二进制数据包进行通讯。由服务器向客户端发送第一个包,内容为自己的 RSA主

  机密钥(host key)的公钥部分、RSA服务密钥(server key)的公钥部分、支持的加密方法、支持的认证方法、次协议版本

  标志、以及一个 64 位的随机数(cookie)。这个包没有加密,是明文发送的。客户端接收包后,依据这两把密钥和被称

  为cookie的 64 位随机数计算出会话号(session id)和用于加密的会话密钥(session key)。随后客户端回送一个包给服

  务器,内容为选用的加密方法、cookie的拷贝、客户端次协议版本标志、以及用服务器的主机密钥的公钥部分和服务密钥

  的公钥部分进行加密的用于服务器计算会话密钥的32 字节随机字串。除这个用于服务器计算会话密钥的 32字节随机字串

  外,这个包的其他内容都没有加密。之后,双方的通讯就是加密的了,服务器向客户端发第二个包(双方通讯中的第一个

  加密的包)证实客户端的包已收到。

  第三阶段:

  双方随后进入认证阶段。可以选用的认证的方法有:

  (1) ~/.rhosts 或 /etc/hosts.equiv 认证(缺省配置时不容许使用它);

  (2) 用 RSA 改进的 ~/.rhosts 或 /etc/hosts.equiv 认证;

  (3) RSA 认证;

  (4) 口令认证。

  如果是使用 ~/.rhosts 或 /etc/hosts.equiv 进行认证,客户端使用的端口号必须小于1024。

  认证的第一步是客户端向服务器发 SSH_CMSG_USER 包声明用户名,服务器检查该用户是否存在,确定是否需要进行认证。

  如果用户存在,并且不需要认证,服务器回送一个SSH_SMSG_SUCCESS 包,认证完成。否则,服务器会送一个

  SSH_SMSG_FAILURE 包,表示或是用户不存在,或是需要进行认证。注意,如果用户不存在,服务器仍然保持读取从客户端

  发来的任何包。除了对类型为 SSH_MSG_DISCONNECT、SSH_MSG_IGNORE 以及 SSH_MSG_DEBUG 的包外,对任何类型的包都以

  SSH_SMSG_FAILURE 包。用这种方式,客户端无法确定用户究竟是否存在。

  如果用户存在但需要进行认证,进入认证的第二步。客户端接到服务器发来的 SSH_SMSG_FAILURE 包后,不停地向服务器

  发包申请用各种不同的方法进行认证,直到时限已到服务器关闭连接为止。时限一般设定为 5 分钟。对任何一个申请,

  如果服务器接受,就以 SSH_SMSG_SUCCESS 包回应;如果不接受,或者是无法识别,则以 SSH_SMSG_FAILURE 包回应。

  第四阶段:

  认证完成后,客户端向服务器提交会话请求。服务器则进行等待,处理客户端的请求。在这个阶段,无论什么请求只要成

  功处理了,服务器都向客户端回应 SSH_SMSG_SUCCESS包;否则回应 SSH_SMSG_FAILURE 包,这表示或者是服务器处理请求

  失败,或者是不能识别请求。会话请求分为这样几类:申请对数据传送进行压缩、申请伪终端、启动 X11、TCP/IP端口

  转发、启动认证代理、运行 shell、执行命令。到此为止,前面所有的报文都要求 IP 的服务类型(TOS)使用选项

  IPTOS_THROUGHPUT。

  第五阶段:

  会话申请成功后,连接进入交互会话模式。在这个模式下,数据在两个方向上双向传送。此时,要求 IP 的服务类型(TOS)

  使用 IPTOS_LOWDELAY 选项。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章