《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > Linux中用SSH配置安全远程登录的实践
Linux中用SSH配置安全远程登录的实践
葛秀慧 田 浩 王嘉祯
摘要: 介绍了用SSH配置安全认证、生成密钥以及实现远程登录的具体操作。
关键词: Telnet 远程登录
Abstract:
Key words :

  摘  要: 介绍了用SSH配置安全认证、生成密钥以及实现远程登录的具体操作。

  关键词: SSH协议  Telnet  openSSH

   系统程序员和管理员都喜欢远程登录自己的服务器,但传统的网络服务程序(如telnet、ftp、rlogin和rsh)及相关的服务在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,黑客通过数据包截获工具可以截获这些口令和数据。这些服务程序的安全验证方式也存在弱点,易受到中间人(man-in-the-middle)方式的攻击。中间人攻击方式中,中间人冒充真正的服务器接收客户机发送给服务器的数据,并篡改客户机的信息后发送至真正的服务器。这使得通信过程不再安全,并且失去了传送数据的私密性。

  SSH(secure shell)是一个在应用程序中提供安全通信的协议。通过SSH可以安全地访问服务器。因为SSH把所有传输的数据进行加密,确保数据的完整和不被篡改,从而确保私密性。这样中间人攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。另外,传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很广泛的用途,它可代替远程登录程序Telnet,又可以为ftp、pop、甚至ppp提供安全的通道,从而在不安全的网络环境下、在客户/服务器之间提供安全和加密的信息交流。

  远程运行SSH时需要远程机器正在运行SSHd(SSH守护程序),SSH的标准端口是22。由于大多数防火墙对这个端口都是禁用的,所以需要将SSH守护进程指派给Internet服务的端口上运行,因为即使最严密的防火墙也要打开21、8080、25和110中的一个。这样就可以通过大多数的防火墙来使用SSH进行远程登录。

1 SSH提供的安全认证

  SSH提供二种级别的安全验证。一种是基于口令的安全验证;另一种是基于密钥的安全验证。首先生成一对密钥,将公钥安装在需要访问的服务器中。当客户端需要连接到SSH服务器时,客户端软件就会向服务器发出请求,请求用自己的密钥进行安全验证。服务器收到请求之后,先在该服务器中寻找客户端的公用密钥,然后把它和客户端发送过来的公钥进行比较。如果二个密钥相同,则SSHd生成随机数,并用公钥进行加密,然后SSHd将加密的随机数发回给正在客户端运行的SSH。SSH用私钥解密后,再把它发送回客户端。这样就完成了整个验证过程。

2 SSH的具体实现

  (1)确认系统已经安装了SSH并进行测试

  (2)生成管理SSH密钥

  SSH的密匙是用SSH-keygen程序管理的。下面是SSH-keygen密钥生成的一个实例。

  

    

  上述过程需要分别在每个用SSH连接的远程服务器上完成。为了保证他人对于authorized_keys没有写的权限并保证SSH工作,chmod是必须的。如果想从不同的计算机登录到远程主机,authorized_keys文件也可以有多个公用密匙。这种情况下必须在新的计算机上重新生成一对密匙,然后重复上述过程。需要注意的是,当取消了主机上的账号之后,必须删掉这对密匙。

3  SSH配置

  (1)配置SSH客户端

  OpenSSH的配置数据可以有三种语法形式,按照优先权从大到小的顺序分别是:命令行选项、用户配置文件(~/.SSH/config)、系统配置文件(/etc/SSH/SSH_config)。所有的命令行选项均能在配置文件中设置。因为任何配置值都是首次设置时有效,所以指定主机的声明应该位于配置文件的最初,而默认值则放于文件末尾。下面是/etc/SSH/SSH_

  config文件的内容,用户配置文件可以从系统配置文件修改得到。

  #/etc/SSH/SSH_config文件

  #Host*

    # ForwardAgent no

  # ForwardX11 no

  # RhostsAuthentication yes

  # RhostsRSAAuthentication yes

  # RSAAuthentication yes

  # PasswordAuthentication yes

  # FallBackToRsh no

  # UseRsh no

  # BachMode no

  # CheckHostIP yes

  # StrictHostKeyChecking ask

  # IdentityFile ~/.SSH/identity

  # IdentityFile ~/.SSH/id_rsa

  # IdentityFile ~/.SSH/id_dsa

  # Port 22

  # Protocol 2,1

  # Cipher 3des

  # Ciphers aes128-cbc,3des-cbc,blowfish-cbc,

  #cast128-cbc,arcfour,aes192-cbc,aes2

  # EscapeChar~

  Host*

  ForwardX11 yes

  ForwardAgent no

  FallBackToRsh no

  #/etc/SSH/SSH_config文件到此结束

  (2)配置SSH服务端

  SSH服务器配置文件是/etc/SSH/SSHd_config,对于SSH 1.x和2.x,OpenSSH的配置文件是一样的。下面是

/etc/SSH/SSHd_config的内容:

  #/etc/SSH/SSHd_config文件

  #Port 22

  #Protocol 2,1

  #ListenAddress 0.0.0.0

  #ListenAddress ∷

  # SSH1的HostKey

  #HostKey/etc/SSH/SSH_host_key

  #记录

  SyslogFacility AUTHPRIV

  LogLevel INFO

  #认证:

  PermitRootLogin yes

  #是否允许超级用户登录,与telnet不同,SSH缺省允许超

    #级用户登录

  StrictModes yes

  SAAuthentication yes

  PubkeyAuthentication yes

  AuthorizedKeysFile .SSH/authorized_keys

  # 禁用rhosts认证

  RhostsAuthentication no

  # 禁读用户的~/.rhosts和~/.shosts文件

  IgnoreRhosts yes

  # /etc/SSH/SSH_known_hosts中需要host keys

  RhostsRSAAuthentication no

  IgnoreUserKnownHosts no

  # 把这个选项设置为no,只允许用户用基于密匙而非基于

    # 口令方式登录。这能在很大程度上提高系统的安全性。

  PasswordAuthentication yes

  PermitEmptyPasswords no

  #X11Forwarding no

  X11Forwarding yes

  #X11DisplayOffset 10

  #X11UseLocalhost yes

  #PrintMotd yes

  #PrintLastLog yes

  #KeepAlive yes

  #UseLogin no

  #MaxStartups 10

  # no default banner path

  #Banner /some/path

  #VerifyReverseMapping no

  # override default of no subsystems

  Subsystem sftp /usr/libexec/openSSH/sftp-server

  # /etc/SSH/SSHd_config文件到此结束

4 SSH实现远程登录

  最容易受到监听工具威胁的程序之一是Telnet,Sniffer程序可以轻易地得到用户的登录名和密码。解决的方法就是用SSH替代Telnet。它使传输中的所有信息加密,确保了传输信息不被窃听。

  下面是第一次登录的情况:

  [gxh@cs cs]$ SSH localhost

  The authenticity of host ′localhost(127.0.0.1)′can′t be established.

  RSA key fingerprint is 4b:91:0a:85:7a:ab:f6:1a:f5:51:07:

  33:4d:ba:ec:e3.

  Are you sure you want to continue connecting (yes/no)? yes

  Warning:Permanently added ′localhost′(RSA) to the list of

  known hosts.

  gxh@localhost′s password:

  Last login:Wed Oct 2 06:53:42 2002 from 202.206.196.221

  [gxh@cs cs]$

  以后的登录情况:

  [gxh@cs cs]$ SSH localhost

  gxh@localhost′s password:

  Last login:Wed Oct 2 09:43:16 2002 from cs

  [gxh@cs gxh]$

5  结  论

  SSH广泛使用在Linux中,它的免费软件openSSH更具的生命力。Linux系统中用SSH就能实现安全的远程登录。当然对于其他的服务FTP、POP等,SSH都能安全出色地完成任务,并且SSH在其安全认证中可以采用自己独特的算法。

此内容为AET网站原创,未经授权禁止转载。