在 Oracle® Solaris 11.2 中管理安全 Shell 访问

退出打印视图

更新时间: 2014 年 9 月
 
 

如何设置基于主机的安全 Shell 验证

以下过程设置一个公钥系统,其中使用客户机的公钥进行服务器上的验证。用户还必须创建一个公钥/私钥对。

在此过程中,“客户机”一词和“本地主机”一词是指用户在其中键入 ssh 命令的系统。术语服务器远程主机是指客户机尝试访问的系统。

开始之前

您必须承担 root 角色。有关更多信息,请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限

  1. 在客户机上,启用基于主机的验证。

    在客户机配置文件 /etc/ssh/ssh_config 中,键入以下项:

    HostbasedAuthentication yes

    有关该文件的语法,请参见 ssh_config(4) 手册页。

  2. 在服务器上,启用基于主机的验证。

    在服务器验证文件 /etc/ssh/sshd_config 中,键入相同的项:

    HostbasedAuthentication yes

    有关该文件的语法,请参见 sshd_config(4) 手册页。

  3. 在服务器上,您或用户应配置允许将客户机识别为可信主机的文件。

    有关更多信息,请参见 sshd(1M) 手册页的 FILES 部分。

    • 如果是您进行配置,请将客户机作为一项添加到服务器的 /etc/ssh/shosts.equiv 文件中。
      client-host
    • 如果是用户进行配置,则他们应将客户机的一个项添加到其在服务器上的 ~/.shosts 文件中。
      client-host
  4. 在服务器上,确保 sshd 守护进程可以访问可信主机列表。

    /etc/ssh/sshd_config 文件中,将 IgnoreRhosts 设置为 no

    ## sshd_config
    IgnoreRhosts no
  5. 确保站点上的安全 Shell 用户在两台主机上都拥有帐户。
  6. 使用以下方法之一,将客户机的公钥放到服务器上:
    • 修改服务器上的 sshd_config 文件,然后指示用户将客户机的公共主机密钥添加到其 ~/.ssh/known_hosts 文件中。
      ## sshd_config
      IgnoreUserKnownHosts no

      有关用户说明,请参见如何生成用于安全 Shell 的公钥/私钥对

    • 将客户机的公钥复制到服务器。

      主机密钥存储在 /etc/ssh 目录中。这些密钥通常由 sshd 守护进程在首次引导时生成。

      1. 将密钥添加到服务器上的 /etc/ssh/ssh_known_hosts 文件中。

        在客户机上,在一行中键入以下命令(不带反斜杠)。

        # cat /etc/ssh/ssh_host_dsa_key.pub | ssh RemoteHost \
        'cat >> /etc/ssh/ssh_known_hosts && echo "Host key copied"'

        注 -  如果服务器中没有主机密钥,则使用安全 Shell 将生成类似如下的错误消息:
        Client and server could not agree on a key exchange algorithm:
        client "diffie-hellman-group-exchange-sha256,diffie-hellman-group-
        exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1",
        server "gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==". Make sure host keys 
        are present and accessible by the server process. See sshd_config(4) 
        description of "HostKey" option.

      2. 出现提示时,提供登录口令。

        复制该文件后,将显示 "Host key copied"(主机密钥已复制)消息。

        /etc/ssh/ssh_known_hosts 文件中的每一行均由空格分隔的字段组成:

        hostnames algorithm-name publickey comment
      3. 编辑 /etc/ssh/ssh_known_hosts 文件,添加 RemoteHost 作为复制的项中的第一个字段。
        ## /etc/ssh/ssh_known_hosts File
        RemoteHost <copied entry>
示例 1-1  设置基于主机的验证

    在以下示例中,每台主机同时配置为服务器和客户机。任一主机上的用户都可以启动与另一台主机的 ssh 连接。以下配置可使每台主机同时成为服务器和客户机:

  • 在每台主机上,安全 Shell 配置文件都包含以下项:

    ## /etc/ssh/ssh_config
    HostBasedAuthentication yes
    #
    ## /etc/ssh/sshd_config
    HostBasedAuthentication yes
    IgnoreRhosts no
  • 在每台主机上,shosts.equiv 文件都包含对应于另一台主机的项:

    ## /etc/ssh/shosts.equiv on machine2
    machine1
    ## /etc/ssh/shosts.equiv on machine1
    machine2
  • 每台主机的公钥位于另一台主机的 /etc/ssh/ssh_known_hosts 文件中:

    ## /etc/ssh/ssh_known_hosts on machine2
    … machine1
    ## /etc/ssh/ssh_known_hosts on machine1
    … machine2
  • 用户在这两台主机上都拥有帐户。例如,将出现针对用户 John Doe 的以下信息:

    ## /etc/passwd on machine1
    jdoe:x:3111:10:J Doe:/home/jdoe:/bin/sh
    ## /etc/passwd on machine2
    jdoe:x:3111:10:J Doe:/home/jdoe:/bin/sh