Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19267600
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: 网络与安全

2008-05-31 21:36:01

介绍SSH
  什么是SSH?
  传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
  
  SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。
  
  最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。
  
  SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
  
  SSH的安全验证是如何工作的
  从客户端来看,SSH提供两种级别的安全验证。
  
  第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
  
  第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
  
  用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
  
  第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
  
  安装并测试OpenSSH
  因为受到美国法律的限制,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从网络上下载并安装OpenSSH(有关OpenSSH的安装和配置请参考:)。
  
  安装完OpenSSH之后,用下面命令测试一下:
  
  ssh -l [your accountname on the remote host] [address of the remote host]
  
  如果OpenSSH工作正常,你会看到下面的提示信息:
  
  The authenticity of host [hostname] can't be established.
  Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
  Are you sure you want to continue connecting (yes/no)?
  
  OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。
  
  然后,SSH提示你输入远程主机上你的帐号的口令。输入完口令之后,就建立了SSH连接,这之后就可以象使用telnet那样使用SSH了。
  
  SSH的密匙
  生成你自己的密匙对
  生成并分发你自己的密匙有两个好处:
  
  1) 可以防止“中间人”这种攻击方式
  
  2) 可以只用一个口令就登录到所有你想登录的服务器上
  
  用下面的命令可以生成密匙:
  
  ssh-keygen
  
  如果远程主机使用的是SSH 2.x就要用这个命令:
  
  ssh-keygen –d
  
  在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存成不同的文件的。
  
  ssh-keygen命令运行之后会显示下面的信息:
  
  Generating RSA keys: ............................ooooooO......ooooooO
  Key generation complete.
  Enter file in which to save the key (/home/[user]/.ssh/identity):
  [按下ENTER就行了]
  Created directory '/home/[user]/.ssh'.
  Enter passphrase (empty for no passphrase):
  [输入的口令不会显示在屏幕上]
  Enter same passphrase again:
  [重新输入一遍口令,如果忘记了口令就只能重新生成一次密匙了]
  Your identification has been saved in /home/[user]/.ssh/identity.
  [这是你的私人密匙]
  Your public key has been saved in /home/[user]/.ssh/identity.pub.
  The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine]
  
  “ssh-keygen –d”做的是几乎同样的事,但是把一对密匙存为(默认情况下)“/home/[user]/.ssh/id_dsa”(私人密匙)和“/home/[user]/.ssh/id_dsa.pub”(公用密匙)。
  
  现在你有一对密匙了:公用密匙要分发到所有你想用ssh登录的远程主机上去;私人密匙要好好地保管防止别人知道你的私人密匙。用“ls –l ~/.ssh/identity”或“ls –l ~/.ssh/id_dsa”所显示的文件的访问权限必须是“-rw-------”。
  
  如果你怀疑自己的密匙已经被别人知道了,不要迟疑马上生成一对新的密匙。当然,你还要重新分发一次公用密匙。
  
  分发公用密匙
  在每一个你需要用SSH连接的远程服务器上,你要在自己的家目录下创建一个“.ssh”的子目录,把你的公用密匙“identity.pub” 拷贝到这个目录下并把它重命名为“authorized_keys”。然后执行:
  
  chmod 644 .ssh/authorized_keys
  
  这一步是必不可少的。如果除了你之外别人对“authorized_keys”文件也有写的权限,SSH就不会工作。
  
  如果你想从不同的计算机登录到远程主机,“authorized_keys”文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的“identify.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。当然在新的计算机上你必须有一个帐号,而且密匙是用口令保护的。有一点很重要,就是当你取消了这个帐号之后,别忘了把这一对密匙删掉。
  
  配置SSH
  配置客户端的软件
  OpenSSH有三种配置方式:命令行参数、用户配置文件和系统级的配置文件(“/etc/ssh/ssh_config”)。命令行参数优先于配置文件,用户配置文件优先于系统配置文件。所有的命令行的参数都能在配置文件中设置。因为在安装的时候没有默认的用户配置文件,所以要把“/etc/ssh/ssh_config”拷贝并重新命名为“~/.ssh/config”。
  
  标准的配置文件大概是这样的:
  
  [lots of explanations and possible options listed]
  # Be paranoid by default
  Host *
  ForwardAgent no
  ForwardX11 no
  FallBackToRsh no
  
  还有很多选项的设置可以用“man ssh”查看“CONFIGURATION FILES”这一章。
  
  配置文件是按顺序读取的。先设置的选项先生效。
  
  假定你在上有一个名为“bilbo”的帐号。而且你要把“ssh-agent”和“ssh-add”结合起来使用并且使用数据压缩来加快传输速度。因为主机名太长了,你懒得输入这么长的名字,用“fbc”作为“”的简称。你的配置文件可以是这样的:
  
  Host *fbc
  HostName
  User bilbo
  ForwardAgent yes
  Compression yes
  # Be paranoid by default
  Host *
  ForwardAgent no
  ForwardX11 no
  FallBackToRsh no
  
  你输入“ssh fbc”之后,SSH会自动地从配置文件中找到主机的全名,用你的用户名登录并且用“ssh-agent”管理的密匙进行安全验证。这样很方便吧!
  
  用SSH连接到其它远程计算机用的还是“paranoid(偏执)”默认设置。如果有些选项没有在配置文件或命令行中设置,那么还是使用默认的“paranoid”设置。
  
  在我们上面举的那个例子中,对于到的SSH连接:“ForwardAgent”和“Compression”被设置为“Yes”;其它的设置选项(如果没有用命令行参数)“ForwardX11”和“FallBackToRsh”都被设置成“No”。
  
  其它还有一些需要仔细看一看的设置选项是:
  
  l CheckHostIP yes
  
  这个选项用来进行IP地址的检查以防止DNS欺骗。
  
  l CompressionLevel
  
  压缩的级别从“1”(最快)到“9”(压缩率最高)。默认值为“6”。
  
  l ForwardX11 yes
  
  为了在本地运行远程的X程序必须设置这个选项。
  
  l LogLevel DEBUG
  
  当SSH出现问题的时候,这选项就很有用了。默认值为“INFO”。
  
  配置服
阅读(323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~