注意 -
如果您使用 Sun Java Desktop System (Java DS),请勿将
ssh-agent
命令设置为自动运行。因为
ssh-agent
进程的中止由 CDE
接口控制,所以当您退出 Java DS 时,该守护进程仍会继续运行。例如,如果您在 CDE 会话中启动了守护进程,之后转到了 Java DS 会话,然后注销,则该守护进程仍会继续运行。
正在运行的守护进程会占用系统资源。虽然未发现
ssh-agent
守护进程继续保持运行会引发相关问题,但是由于该守护进程包含口令,因此可能会造成安全风险。
在用户启动脚本中自动启动代理守护进程。
将以下行添加到
$HOME/.dtprofile
脚本的末尾:
if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then
eval `/usr/bin/ssh-agent`
退出 CDE 会话时,终止代理守护进程。将以下行添加到 $HOME/.dt/sessions/sessionexit 脚本中: if [ "$SSH_AGENT_PID" != "" -a -x /usr/bin/ssh-agent ]; then
/usr/bin/ssh-agent -k
fi 此项可确保终止 CDE 会话后,任何用户都无法使用安全 Shell 代理。由于脚本使用特定于 CDE 的接口 sessionexit ,因此该过程不会在 Sun Java Desktop System
会话中终止代理守护进程。
如何在安全 Shell 中使用端口转发
可以指定将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。从此端口到远程主机的连接通过安全通道实现。例如,可以指定端口 143 以通过 IMAP4 远程获取电子邮件。同样,也可以在远程端指定端口。 开始之前
使用端口转发之前,管理员必须先在远程安全 Shell 服务器上启用端口转发。有关详细信息,请参见如何在安全 Shell 中配置端口转发。
- 要使用安全的端口转发,请选择以下选项之一:
- 要将本地端口设置为接收来自远程端口的安全通信,请同时指定这两个端口。
指定用于侦听远程通信的本地端口。此外,指定用于转发通信的远程主机和远程端口。 myLocalHost% ssh -L localPort:remoteHost:remotePort
- 要将远程端口设置为接收来自本地端口的安全通信,请同时指定这两个端口。
指定用于侦听远程通信的远程端口。此外,指定用于转发通信的本地主机和本地端口。 myLocalHost% ssh -R remotePort:localhost:localPort 示例 19-4 使用本地端口转发接收邮件
以下示例说明如何使用本地端口转发来安全地接收来自远程服务器的邮件。 myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost
此命令可将连接从 myLocalHost 上端口 9143 转发到端口 143。端口 143 是 myRemoteHost 上的 IMAP v2
服务器端口。用户启动邮件应用程序时,需要指定本地端口号,如以下对话框所示。
请勿将此对话框中的 localhost 与 myLocalHost 相混淆。myLocalHost 是假设的主机名,而 localhost 则是用于标识本地系统的关键字。 示例 19-5 使用远程端口转发在防火墙外部进行通信
本示例说明企业环境中的用户如何将连接从外部网络中的主机转发到公司防火墙内的主机。 myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost
此命令将连接从 myOutsideHost 上的端口 9022 转发到本地主机上的端口 22(sshd 服务器)。 myOutsideHost% ssh -p 9022 localhost
myLocalHost%
如何使用安全 Shell 复制文件
以下过程说明如何使用 scp 命令在主机之间复制加密的文件。您可以在一台本地主机和一台远程主机之间,或者两台远程主机之间复制加密的文件。此命令的运行与 rcp 命令类似,区别在于 scp 命令会提示进行验证。有关更多信息,请参见 scp(1) 手册页。
也可以使用 sftp,即 ftp 命令的一种更安全的形式。有关更多信息,请参见 sftp(1) 手册页。有关示例,请参见示例 19-6。
- 启动安全的复制程序。
指定源文件、远程目标上的用户名和目标目录。 myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
- 出现提示时,提供口令短语。
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
myfile.1 25% |******* | 640 KB 0:20 ETA
myfile.1
键入口令短语后,将会显示进度指示器。请参见上述输出中的第二行。进度指示器显示以下内容:
已传输的文件百分比
表示已传输文件百分比的一系列星号
已传输的数据量
完整文件的估计到达时间 (estimated time of arrival, ETA)(即剩余的时间量)
示例 19-6 使用 sftp 命令时指定一个端口
在本示例中,用户希望 sftp 命令使用特定端口。用户使用 -o 选项来指定端口。 % sftp -o port=2222 guest@RemoteFileServer
如何设置到防火墙外部主机的缺省连接
可以使用安全 Shell 建立从防火墙内的主机到防火墙外的主机的连接。通过在配置文件中指定 ssh 的代理命令或者在命令行中将该代理命令指定为选项,可以完成此任务。有关命令行选项,请参见示例 19-7。
通常,可以通过配置文件定制 ssh 交互。
可以在 ~/.ssh/config 中定制独立的个人文件。
或者,可以使用管理配置文件
/etc/ssh/ssh_config
中的设置。
可以使用两种类型的代理命令定制这些文件。一个是用于 HTTP 连接的代理命令。另一个是用于 SOCKS5 连接的代理命令。有关更多信息,请参见
ssh_config
(4)
手册页。
-
在配置文件中指定代理命令和主机。
使用以下语法添加所需数量的行:
[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
-
指定代理命令。
该命令可以是以下之一:
-
-h
proxy-server
和
-p
proxy-port
-
这些选项分别指定代理服务器和代理端口。如果存在,则代理将覆盖指定代理服务器和代理端口的任何环境变量,如
HTTPPROXY
、
HTTPPROXYPORT
、
SOCKS5_PORT
、
SOCKS5_SERVER
和
http_proxy
。
http_proxy
变量指定 URL。如果不使用这些选项,则必须设置相关的环境变量。有关更多信息,请参见
ssh-socks5-proxy-connect
(1)
和
ssh-http-proxy-connect
(1)
手册页。
-
outside-host
-
指定要连接到的特定主机。请在命令行中使用
%h
替换参数来指定主机。
-
outside-port
-
指定要连接的特定端口。请在命令行中使用
%p
替换参数来指定端口。通过指定
%h
和
%p
而不使用
Host
outside-host
选项,只要调用
ssh
命令即可将代理命令应用到主机参数。
-
运行安全 Shell,指定外部主机。
例如,键入以下命令:
myLocalHost% ssh myOutsideHost
该命令可在个人配置文件中查找
myOutsideHost
的代理命令规范。如果找不到规范,则该命令将在系统范围的配置文件
/etc/ssh/ssh_config
中查找。该代理命令将替代
ssh
命令。
示例 19-7 通过命令行连接到防火墙外部的主机
如何设置到防火墙外部主机的缺省连接
说明了如何在配置文件中指定代理命令。在本示例中,在
ssh
命令行中指定代理命令。
% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \
-h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost
ssh
命令的
-o
选项提供了指定代理命令的命令行方法。此示例命令可执行以下操作:
使用 HTTP 代理命令替代
ssh
使用端口
8080
并将
myProxyServer
用作代理服务器
连接到
myOutsideHost
上的端口
22
|