频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

SSH使用及协议分析

来源:ChinaITLab 作者: 出处:巧巧读书 2007-10-01 进入讨论组
访问 http://www.qqread.com/sys-soft/f197792.html
  SSH是一个用来替代TELNETFTP以及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 选项。当服务器告 更多文章 更多内容请看SSH技术手册SSH安全技术TCP/IP协议专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章