系统管理指南:安全性服务

使用 Solaris 安全 Shell

Solaris 安全 Shell 可提供本地 shell 和远程 shell 之间的安全访问。有关更多信息,请参见 ssh_config(4)ssh(1) 手册页。

Procedure如何生成用于 Solaris 安全 Shell 的公钥/私钥对

如果用户的站点要实现基于主机的验证或用户公钥验证,则必须生成公钥/私钥对。有关其他选项,请参见 ssh-keygen(1) 手册页。

开始之前

通过系统管理员确认是否配置了基于主机的验证。

  1. 启动密钥生成程序。


    myLocalHost% ssh-keygen -t rsa
    
    Generating public/private rsa key pair.
    
    …

    其中,-t 是算法类型,可以是 rsadsarsa1 之一。

  2. 指定将保存密钥的文件的路径。

    缺省情况下,文件名 id_rsa(表示 RSA v2 密钥)显示在括号中。可通过按回车键选择此文件。或者,可以键入替换的文件名。


    Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<按回车键>
    

    通过将字符串 .pub 附加到私钥文件的名称后,可以自动创建公钥的文件名。

  3. 键入使用密钥的口令短语。

    此口令短语用于加密私钥。强烈建议不要使用空项。请注意,键入口令短语时,它们不会显示。


    Enter passphrase (empty for no passphrase): <键入口令短语>
    
  4. 重新键入口令短语以进行确认。


    Enter same passphrase again: <键入口令短语>
    
    Your identification has been saved in /home/jdoe/.ssh/id_rsa.
    
    Your public key has been saved in /home/jdoe/.ssh/id_rsa.pub.
    
    The key fingerprint is:
    
    0e:fb:3d:57:71:73:bf:58:b8:eb:f3:a3:aa:df:e0:d1 jdoe@myLocalHost
  5. 检查结果。

    检查密钥文件的路径是否正确。


    % ls ~/.ssh
    
    id_rsa
    
    id_rsa.pub

    此时,已创建公钥/私钥对。

  6. 选择适当的选项:

    • 如果管理员已配置了基于主机的验证,则可能需要将本地主机的公钥复制到远程主机。

      现在即可登录到远程主机。有关详细信息,请参见如何使用 Solaris 安全 Shell 登录到远程主机

      1. 在一行中键入命令(不带反斜杠)。


        % cat /etc/ssh/ssh_host_dsa_key | ssh RemoteHost \
        
        'cat >> ~./ssh/known_hosts && echo "Host key copied"'
        
      2. 出现提示时,提供登录口令。


        Enter password: <键入口令>
        
        Host key copied
        
        %
    • 如果站点使用公钥来进行用户验证,请在远程主机上装载 authorized_keys 文件。

      1. 将公钥复制到远程主机。

        在一行中键入命令(不带反斜杠)。


        myLocalHost% cat $HOME/.ssh/id_rsa.pub | ssh myRemoteHost \
        
        'cat >> .ssh/authorized_keys && echo "Key copied"'
        
      2. 出现提示时,提供登录口令。

        复制文件时,将会显示消息 "Key copied"。


        Enter password: 键入登录口令
        
        Key copied
        
        myLocalHost%
  7. (可选的)减少口令短语的提示。

    有关过程,请参见如何减少 Solaris 安全 Shell 中的口令提示。有关更多信息,请参见 ssh-agent(1)ssh-add(1) 手册页。


示例 18–2 为用户建立 v1 RSA 密钥

在以下示例中,用户可以访问运行 Solaris 安全 Shell v1 协议的主机。要通过 v1 主机进行验证,用户应创建 v1 密钥,然后将公钥部分复制到远程主机。


myLocalHost% ssh-keygen -t rsa1 -f /home/jdoe/.ssh/identity

Generating public/private rsa key pair.

…

Enter passphrase (empty for no passphrase): <键入口令短语>

Enter same passphrase again: <键入口令短语>

Your identification has been saved in /home/jdoe/.ssh/identity.

Your public key has been saved in /home/jdoe/.ssh/identity.pub.

The key fingerprint is:

…

myLocalHost% ls ~/.ssh

id_rsa

id_rsa.pub

identity

identity.pub

myLocalHost% cat $HOME/.ssh/identity.pub | ssh myRemoteHost \

'cat >> .ssh/authorized_keys && echo "Key copied"'

Procedure如何更改 Solaris 安全 Shell 私钥的口令短语

以下过程不会更改私钥。此过程将更改私钥的验证机制,即口令短语。有关更多信息,请参见 ssh-keygen(1) 手册页。

    更改口令短语。

    键入带有 -p 选项的 ssh-keygen 命令,并回答提示问题。


    myLocalHost% ssh-keygen -p
    
    Enter file which contains the private key (/home/jdoe/.ssh/id_rsa):<按回车键>
    
    Enter passphrase (empty for no passphrase): <键入口令短语>
    
    Enter same passphrase again:   <键入口令短语>
    

    其中,-p 用于请求更改私钥文件的口令短语。

Procedure如何使用 Solaris 安全 Shell 登录到远程主机

  1. 启动 Solaris 安全 Shell 会话。

    键入 ssh 命令,并指定远程主机的名称。


    myLocalHost% ssh myRemoteHost
    

    此时会出现提示,询问远程主机的真实性:


    The authenticity of host 'myRemoteHost' can't be established.
    
    RSA key fingerprint in md5 is: 04:9f:bd:fc:3d:3e:d2:e7:49:fd:6e:18:4f:9c:26
    
    Are you sure you want to continue connecting(yes/no)? 

    初始连接到远程主机时,出现此提示为正常情况。

  2. 如果出现提示,请检验远程主机密钥的真实性。

    • 如果无法确认远程主机的真实性,请键入 no 并与系统管理员联系。


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

      管理员负责更新全局 /etc/ssh/ssh_known_hosts 文件。更新的 ssh_known_hosts 文件可禁止出现此提示。

    • 如果确认了远程主机的真实性,请回答提示问题,并继续下一步。


      Are you sure you want to continue connecting(yes/no)? yes
      
  3. 向 Solaris 安全 Shell 验证自身的身份。

    1. 出现提示时,键入口令短语。


      Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <键入口令短语>
      
    2. 出现提示时,键入帐户口令。


      jdoe@myRemoteHost's password: <键入口令>
      
      Last login: Fri Jul 20 14:24:10 2001 from myLocalHost
      
      myRemoteHost%
  4. 执行远程主机上的事务。

    所发送的命令将会加密。所接收的任何响应都会加密。

  5. 关闭 Solaris 安全 Shell 连接。

    完成后,键入 exit 或者使用常规方法退出 shell。


    myRemoteHost% exit
    
    myRemoteHost% logout
    
    Connection to myRemoteHost closed
    
    myLocalHost%

Procedure如何减少 Solaris 安全 Shell 中的口令提示

如果不想键入口令短语和口令来使用 Solaris 安全 Shell,则可以使用代理守护进程。请在会话开始时启动守护进程。然后,使用 ssh-add 命令将私钥存储到代理守护进程中。如果您在不同的主机上拥有不同的帐户,请添加需要用于会话的密钥。

可以根据需要手动启动代理守护进程,如以下过程中所述。或者,可以将代理守护进程设置为在每个会话开始时自动运行,如如何将 ssh-agent 命令设置为自动运行中所述。

  1. 启动代理守护进程。


    myLocalHost% ssh-agent
    
  2. 检验是否已启动代理守护进程。


    myLocalHost% eval `ssh-agent`
    
    Agent pid 9892
  3. 将私钥添加到代理守护进程。

    键入 ssh-add 命令。


    myLocalHost% ssh-add
    
    Enter passphrase for /home/jdoe/.ssh/id_rsa: <键入口令短语>
    
    Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa)
    
    myLocalHost%
  4. 启动 Solaris 安全 Shell 会话。


    myLocalHost% ssh myRemoteHost
    

    此时不会提示您输入口令短语。


示例 18–3 使用 ssh-add 选项

在本示例中,jdoe 将向代理守护进程添加两个密钥。-l 选项用于列出守护进程中存储的所有密钥。在会话结束时,-D 选项用于删除代理守护进程中的所有密钥。


myLocalHost% ssh-agent

myLocalHost% ssh-add

Enter passphrase for /home/jdoe/.ssh/id_rsa: <键入口令短语>

Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa)

myLocalHost% ssh-add /home/jdoe/.ssh/id_dsa

Enter passphrase for /home/jdoe/.ssh/id_dsa: <键入口令短语>

Identity added:

/home/jdoe/.ssh/id_dsa(/home/jdoe/.ssh/id_dsa)



myLocalHost% ssh-add -l

md5 1024 0e:fb:3d:53:71:77:bf:57:b8:eb:f7:a7:aa:df:e0:d1

/home/jdoe/.ssh/id_rsa(RSA)

md5 1024 c1:d3:21:5e:40:60:c5:73:d8:87:09:3a:fa:5f:32:53

/home/jdoe/.ssh/id_dsa(DSA)



用户管理 Solaris 安全 Shell 事务

myLocalHost% ssh-add -D

Identity removed:

/home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa.pub)

/home/jdoe/.ssh/id_dsa(DSA)

Procedure如何将 ssh-agent 命令设置为自动运行

只要通过自动启动代理守护进程 ssh-agent 来使用 Solaris 安全 Shell,即可避免提供口令短语和口令。可以通过 .dtprofile 脚本启动代理守护进程。要将口令短语和口令添加到代理守护进程,请参见示例 18–3

  1. 在用户启动脚本中自动启动代理守护进程。

    将以下行添加到 $HOME/.dtprofile 脚本的末尾:


    if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then
    
                    eval `/usr/bin/ssh-agent`
    
    fi
  2. 退出 CDE 会话时,终止代理守护进程。

    将以下行添加到 $HOME/.dt/sessions/sessionexit 脚本中:


    if [ "$SSH_AGENT_PID" != "" -a -x /usr/bin/ssh-agent ]; then
    
                    /usr/bin/ssh-agent -k
    
    fi

    此项可确保终止 CDE 会话后,任何用户都无法使用 Solaris 安全 Shell 代理。

Procedure如何在 Solaris 安全 Shell 中使用端口转发

可以指定将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。从此端口到远程主机的连接基于安全通道。例如,可以指定端口 143 以使用 IMAP4 远程获取电子邮件。同样,也可以在远程端指定端口。

开始之前

使用端口转发之前,管理员必须先在远程 Solaris 安全 Shell 服务器上启用端口转发。有关详细信息,请参见如何在 Solaris 安全 Shell 中配置端口转发

    要使用安全的端口转发,请选择以下选项之一:

    • 要将本地端口设置为接收来自远程端口的安全通信,请同时指定这两个端口。

      指定用于侦听远程通信的本地端口。另外,指定用于转发通信的远程主机和远程端口。


      myLocalHost% ssh -L localPort:remoteHost:remotePort 
      
    • 要将远程端口设置为接收来自本地端口的安全通信,请同时指定这两个端口。

      指定用于侦听远程通信的远程端口。另外,指定用于转发通信的本地主机和本地端口。


      myLocalHost% ssh -R remotePort:localhost:localPort
      

示例 18–4 使用本地端口转发接收邮件

以下示例说明如何使用本地端口转发来安全地接收来自远程服务器的邮件。


myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost 

此命令可将连接从 myLocalHost 上的端口 9143 转发到端口 143。端口 143myRemoteHost 上的 IMAP v2 服务器端口。用户启动邮件应用程序时,需要指定本地端口号,如以下对话框中所示。

标题为“邮寄程序-登录”的对话框。“IMAP 服务器”字段显示服务器名,后跟冒号和端口号。

请勿将对话框中的 localhostmyLocalHost 混淆。myLocalHost 是假设的主机名,而 localhost 则是用于标识本地系统的关键字。



示例 18–5 使用远程端口转发在防火墙外部进行通信

本示例说明企业环境中的用户如何将连接从外部网络中的主机转发到公司防火墙内的主机。


myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost

此命令可将连接从 myOutsideHost 上的端口 9022 转发到本地主机上的端口 22sshd 服务器)。


myOutsideHost% ssh -p 9022 localhost

myLocalHost%

Procedure如何使用 Solaris 安全 Shell 复制文件

以下过程说明如何使用 scp 命令在主机之间复制加密的文件。您可以在一台本地主机和一台远程主机之间,或者两台远程主机之间复制加密的文件。该命令的运行与 rcp 命令类似,不同的是 scp 命令会提示进行验证。有关更多信息,请参见 scp(1) 手册页。

也可以使用 sftp(一种形式更安全的 ftp 命令)。有关更多信息,请参见 sftp(1) 手册页。

  1. 启动安全的复制程序。

    指定源文件、远程目标上的用户名和目标目录。


    myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
    
  2. 出现提示时,提供口令短语。


    Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <键入口令短语>
    
    myfile.1       25% |*******                      |    640 KB  0:20 ETA 
    
    myfile.1 

    键入口令短语后,将会显示进度计量器。请参见以上输出中的第二行。进度计量器显示以下内容:

    • 文件名

    • 已传输的文件百分比

    • 表示已传输的文件百分比的一系列星号

    • 已传输的数据量

    • 完整文件的估计到达时间 (estimated time of arrival, ETA),即剩余时间。

Procedure如何设置到防火墙外部主机的缺省连接

可以使用 Solaris 安全 Shell 建立从防火墙内的主机到防火墙外的主机的连接。通过在配置文件中指定 ssh 的代理命令或者在命令行中将该代理命令指定为选项,可以完成此任务。有关的命令行选项,请参见示例 18–6

通常,可以通过配置文件自定义 ssh 交互。

可以使用两种类型的代理命令自定义这些文件。一个是用于 HTTP 连接的代理命令。另一个是用于 SOCKS5 连接的代理命令。有关更多信息,请参见 ssh_config(4) 手册页。

  1. 在配置文件中指定代理命令和主机。

    使用以下语法添加所需数量的行:


    [Host outside-host]
    
    ProxyCommand proxy-command [-h proxy-server] \
    
    [-p proxy-port] outside-host|%h outside-port|%p
    Host outside-host

    在命令行中指定远程主机名时,将代理命令规范限制为实例。如果对 outside-host 使用通配符,则可将代理命令规范应用于一组主机。

    proxy-command

    指定代理命令。该命令可以是以下之一:

    • /usr/lib/ssh/ssh-http-proxy-connect,用于 HTTP 连接

    • /usr/lib/ssh/ssh-socks5-proxy-connect,用于SOCKS5 连接

    -h proxy-server-p proxy-port

    这些选项分别指定代理服务器和代理端口。如果存在,则代理将覆盖指定代理服务器和代理端口的任何环境变量,如 HTTPPROXYHTTPPROXYPORTSOCKS5_PORTSOCKS5_SERVERhttp_proxyhttp_proxy 变量指定 URL。如果不使用这些选项,则必须设置相关的环境变量。有关更多信息,请参见 ssh-socks5-proxy-connect(1)ssh-http-proxy-connect(1) 手册页。

    outside-host

    指定要连接到的特定主机。请在命令行中使用 %h 替换参数来指定主机。

    outside-port

    指定要连接到的特定端口。请在命令行中使用 %p 替换参数来指定端口。通过指定 %h%p 而不使用 Host outside-host 选项,只要调用 ssh 命令即可将应用代理命令到主机参数。

  2. 运行 Solaris 安全 Shell,从而指定外部主机。

    例如,键入以下命令:


    myLocalHost% ssh myOutsideHost
    

    此命令可在个人配置文件中查找 myOutsideHost 的代理命令规范。如果找不到规范,则该命令将在系统范围的配置文件 /etc/ssh/ssh_config 中查找。该代理命令将替换 ssh 命令。


示例 18–6 通过命令行连接到防火墙外部的主机

如何设置到防火墙外部主机的缺省连接说明如何在配置文件中指定代理命令。在本示例中,在 ssh 命令行中指定代理命令。


% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \

-h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost

ssh 命令的 -o 选项提供了指定代理命令的命令行方法。此示例命令可执行以下操作: