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

第 18 章 使用 Solaris 安全 Shell(任务)

使用 Solaris 安全 Shell,用户可以通过不安全的网络安全地访问远程主机。该 shell 提供了用于远程登录和远程文件传输的命令。本章包含以下主题:

有关参考信息,请参见第 19 章,Solaris 安全 Shell(参考)

Solaris 安全 Shell(概述)

在 Solaris 安全 Shell 中,提供了使用口令、公钥,或同时使用二者的验证。所有网络通信都将被加密。因此,Solaris 安全 Shell 可防止可能的入侵者读取被拦截的通信。Solaris 安全 Shell 还可防止入侵者欺骗系统。

Solaris 安全 Shell 还可用作即时 virtual private network, VPN(虚拟专用网络)。VPN 可以转发 X 窗口系统通信,或通过加密的网络链路连接本地计算机和远程计算机之间的各个端口号。

使用 Solaris 安全 Shell,可以执行以下操作:

Solaris 安全 Shell 支持两种版本的安全 Shell 协议。版本 1 是协议的原始版本。版本 2 更安全,该版本修正了版本 1 的一些基本安全设计缺陷。版本 1 仅提供用于协助用户迁移到版本 2。强烈建议用户不要使用版本 1。


注 –

在下文中,v1 用于表示版本 1,v2 用于表示版本 2。


Solaris 安全 Shell 验证

Solaris 安全 Shell 提供公钥和口令方法来验证与远程主机的连接。公钥验证是一种比口令验证更强大的验证机制,因为私钥从不通过网络传送。

请按以下顺序尝试这些验证方法。如果配置不满足验证方法的要求,请尝试下一种方法。

下表显示了验证正在尝试登录到远程主机的用户的要求。该用户位于本地主机(客户机)上。远程主机(服务器)正在运行 sshd 守护进程。下表显示了 Solaris 安全 Shell 验证方法、兼容的协议版本和主机要求。

表 18–1 Solaris 安全 Shell 的验证方法

验证方法(协议版本) 

本地主机(客户机)要求 

远程主机(服务器)要求 

GSS-API (v2)

GSS 机制的启动器凭证。 

GSS 机制的接收器凭证。有关更多信息,请参见获取 Solaris 安全 Shell 中的 GSS 凭证

基于主机 (v2)

用户帐户 

/etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key 中的本地主机私钥

/etc/ssh/ssh_config 中的 HostbasedAuthentication yes

用户帐户 

/etc/ssh/known_hosts~/.ssh/known_hosts 中的本地主机公钥

/etc/ssh/sshd_config 中的 HostbasedAuthentication yes

/etc/ssh/sshd_config 中的 IgnoreRhosts no

/etc/shosts.equiv/etc/hosts.equiv~/.rhosts~/.shosts 中的本地主机项

RSA 或 DSA 公钥 (v2)

用户帐户 

~/.ssh/id_rsa~/.ssh/id_dsa 中的私钥

~/.ssh/id_rsa.pub~/.ssh/id_dsa.pub 中的用户公钥

用户帐户 

~/.ssh/authorized_keys 中的用户公钥

RSA 公钥 (v1) 

用户帐户 

~/.ssh/identity 中的私钥

~/.ssh/identity.pub 中的用户公钥

用户帐户 

~/.ssh/authorized_keys 中的用户公钥

键盘交互 (v2)

用户帐户 

用户帐户 

支持 PAM,包括触发口令生命期后的任意提示和口令更改。 

基于口令(v1 或 v2)

用户帐户 

用户帐户 

支持 PAM。 

.rhosts (v1)

用户帐户 

用户帐户 

/etc/ssh/sshd_config 中的 IgnoreRhosts no

/etc/shosts.equiv/etc/hosts.equiv~/.shosts~/.rhosts 中的本地主机项

仅在服务器上使用 RSA (v1) 的 .rhosts

用户帐户 

/etc/ssh/ssh_host_rsa1_key 中的本地主机公钥

用户帐户 

/etc/ssh/ssh_known_hosts~/.ssh/known_hosts 中的本地主机公钥

/etc/ssh/sshd_config 中的 IgnoreRhosts no

/etc/shosts.equiv/etc/hosts.equiv~/.shosts~/.rhosts 中的本地主机项

企业中的 Solaris 安全 Shell

有关 Solaris 系统中的安全 Shell 的全面介绍,请参见由 Jason Reid 编著的《Secure Shell in the Enterprise》,2003 年 6 月出版,ISBN 为 0-13-142900-0。该书是 Sun Microsystems Press 出版的 Sun BluePrints 丛书的一部分。

有关联机信息,请导航至 Sun 的 BigAdmin System Administration Portal 网站 http://www.sun.com/bigadmin。单击 docs.sun.com,然后在 Other documentation sites 下单击 Sun BluePrints。然后依次单击 Archives by Subject 和 Security。该文档集包括以下文章:

Solaris 10 发行版中 Solaris 安全 Shell 的增强功能

从 Solaris 9 发行版开始,Solaris 安全 Shell 中引入了以下变化:

Solaris 安全 Shell(任务列表)

以下任务列表介绍了用于配置 Solaris 安全 Shell 和使用 Solaris 安全 Shell 的任务列表。

任务 

说明 

参考 

配置 Solaris 安全 Shell 

指导管理员为用户配置 Solaris 安全 Shell。 

配置 Solaris 安全 Shell(任务列表)

使用 Solaris 安全 Shell 

指导用户使用 Solaris 安全 Shell。 

使用 Solaris 安全 Shell(任务列表)

配置 Solaris 安全 Shell(任务列表)

以下任务列表介绍了配置 Solaris 安全 Shell 的过程。

任务 

说明 

参考 

配置基于主机的验证 

在客户机和服务器上配置基于主机的验证。 

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

将主机配置为使用 v1 和 v2 

为使用 v1 和 v2 协议的主机创建公钥文件。 

如何启用 Solaris 安全 Shell v1

配置端口转发 

允许用户使用端口转发。 

如何在 Solaris 安全 Shell 中配置端口转发

配置 Solaris 安全 Shell

缺省情况下,Solaris 安全 Shell 中未启用基于主机的验证,并且不允许同时使用两种协议。更改这些缺省设置需要管理干预。另外,要端口转发正常工作,也需要管理干预。

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

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

在此过程中,术语客户机本地主机是指用户键入 ssh 命令的计算机。术语服务器远程主机是指客户机要尝试访问的计算机。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

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

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


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

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


    HostbasedAuthentication yes
  4. 在服务器上,配置文件以允许将客户机识别为受信任主机。

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

    • 将客户机作为一项添加到服务器的 /etc/shosts.equiv 文件中。


      client-host
      
    • 或者,可以指示用户在服务器上将一个有关客户机的项添加到其 ~/.shosts 文件中。


      client-host
      
  5. 在服务器上,确保 sshd 守护进程可以访问受信任主机的列表。

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


    # sshd_config
    
    IgnoreRhosts no
  6. 确保站点上的 Solaris 安全 Shell 用户在两台主机上都拥有帐户。

  7. 执行以下操作之一,以将客户机的公钥放到服务器上。

    • 修改服务器上的 sshd_config 文件,然后指示用户将客户机的公共主机密钥添加到其 ~/.ssh/known_hosts 文件中。


      # sshd_config
      
      IgnoreUserKnownHosts no

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

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

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

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

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


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

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


示例 18–1 设置基于主机的验证

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


Procedure如何启用 Solaris 安全 Shell v1

此过程在一台主机与运行 v1 和 v2 的多台主机交互操作时非常有用。

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将主机配置为同时使用两种 Solaris 安全 Shell 协议。

    编辑 /etc/ssh/sshd_config 文件。


    # Protocol 2
    
    Protocol 2,1
  3. 为用于 v1 的主机密钥提供一个独立文件。

    /etc/ssh/sshd_config 文件中添加 HostKey 项。


    HostKey /etc/ssh/ssh_host_rsa_key
    
    HostKey /etc/ssh/ssh_host_dsa_key
    
    HostKey /etc/ssh/ssh_host_rsa1_key
    
  4. 生成用于 v1 的主机密钥。


    # ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_rsa1_key -N ''
    
    -t rsa1

    表示用于 v1 的 RSA 算法。

    -f

    表示保存主机密钥的文件。

    -N ''

    表示无需口令短语。

  5. 重新启动 sshd 守护进程。


    # svcadm restart network/ssh:default
    

    您也可以重新引导系统。

Procedure如何在 Solaris 安全 Shell 中配置端口转发

使用端口转发可以将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。同样,也可以在远程端指定端口。


注 –

Solaris 安全 Shell 端口转发必须使用 TCP 连接。Solaris 安全 Shell 不支持使用 UDP 连接进行端口转发。


  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将角色指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 将远程 Solaris 安全 Shell 服务器配置为允许端口转发。

    /etc/ssh/sshd_config 文件中,将 AllowTcpForwarding 的值更改为 yes


    # Port forwarding
    
    AllowTcpForwarding yes
  3. 重新启动 Solaris 安全 Shell 服务。


    remoteHost# svcadm restart network/ssh:default
    

    有关管理持久性服务的信息,请参见《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”svcadm(1M) 手册页。

  4. 检验是否可以使用端口转发。


    remoteHost# /usr/bin/pgrep -lf sshd
    
     1296 ssh -L 2001:remoteHost:23 remoteHost

使用 Solaris 安全 Shell(任务列表)

以下任务列表介绍了用户使用 Solaris 安全 Shell 的过程。

任务 

说明 

参考 

创建公钥/私钥对。 

针对要求公钥验证的站点启用对 Solaris 安全 Shell 的访问。 

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

更改口令短语 

更改用于验证私钥的短语。 

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

使用 Solaris 安全 Shell 登录 

远程登录时提供加密的 Solaris 安全 Shell 通信。此过程与使用 rsh 命令类似。

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

登录到 Solaris 安全 Shell 而不会出现提示要求输入口令。  

允许使用可向 Solaris 安全 Shell 提供口令的代理进行登录。 

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

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

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

指定要在基于 TCP 的 Solaris 安全 Shell 连接中使用的本地端口或远程端口。 

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

使用 Solaris 安全 Shell 复制文件 

在主机之间安全地复制文件。 

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

安全地从防火墙内的主机连接到防火墙外的主机。 

使用与 HTTP 或 SOCKS5 兼容的 Solaris 安全 Shell 命令连接由防火墙隔离的主机。 

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

使用 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 选项提供了指定代理命令的命令行方法。此示例命令可执行以下操作: