Solaris 安全 Shell 可提供本地 shell 和远程 shell 之间的安全访问。有关更多信息,请参见 ssh_config(4) 和 ssh(1) 手册页。
如果用户的站点要实现基于主机的验证或用户公钥验证,则必须生成公钥/私钥对。有关其他选项,请参见 ssh-keygen(1) 手册页。
通过系统管理员确认是否配置了基于主机的验证。
启动密钥生成程序。
myLocalHost% ssh-keygen -t rsa Generating public/private rsa key pair. … |
其中,-t 是算法类型,可以是 rsa、dsa 或 rsa1 之一。
指定将保存密钥的文件的路径。
缺省情况下,文件名 id_rsa(表示 RSA v2 密钥)显示在括号中。可通过按回车键选择此文件。或者,可以键入替换的文件名。
Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<按回车键> |
通过将字符串 .pub 附加到私钥文件的名称后,可以自动创建公钥的文件名。
键入使用密钥的口令短语。
此口令短语用于加密私钥。强烈建议不要使用空项。请注意,键入口令短语时,它们不会显示。
Enter passphrase (empty for no passphrase): <键入口令短语> |
重新键入口令短语以进行确认。
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 |
检查结果。
检查密钥文件的路径是否正确。
% ls ~/.ssh id_rsa id_rsa.pub |
此时,已创建公钥/私钥对。
选择适当的选项:
如果管理员已配置了基于主机的验证,则可能需要将本地主机的公钥复制到远程主机。
现在即可登录到远程主机。有关详细信息,请参见如何使用 Solaris 安全 Shell 登录到远程主机。
如果站点使用公钥来进行用户验证,请在远程主机上装载 authorized_keys 文件。
(可选的)减少口令短语的提示。
有关过程,请参见如何减少 Solaris 安全 Shell 中的口令提示。有关更多信息,请参见 ssh-agent(1) 和 ssh-add(1) 手册页。
在以下示例中,用户可以访问运行 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"' |
以下过程不会更改私钥。此过程将更改私钥的验证机制,即口令短语。有关更多信息,请参见 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 用于请求更改私钥文件的口令短语。
启动 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)? |
初始连接到远程主机时,出现此提示为正常情况。
如果出现提示,请检验远程主机密钥的真实性。
所发送的命令将会加密。所接收的任何响应都会加密。
关闭 Solaris 安全 Shell 连接。
完成后,键入 exit 或者使用常规方法退出 shell。
myRemoteHost% exit myRemoteHost% logout Connection to myRemoteHost closed myLocalHost% |
如果不想键入口令短语和口令来使用 Solaris 安全 Shell,则可以使用代理守护进程。请在会话开始时启动守护进程。然后,使用 ssh-add 命令将私钥存储到代理守护进程中。如果您在不同的主机上拥有不同的帐户,请添加需要用于会话的密钥。
可以根据需要手动启动代理守护进程,如以下过程中所述。或者,可以将代理守护进程设置为在每个会话开始时自动运行,如如何将 ssh-agent 命令设置为自动运行中所述。
启动代理守护进程。
myLocalHost% ssh-agent |
检验是否已启动代理守护进程。
myLocalHost% eval `ssh-agent` Agent pid 9892 |
将私钥添加到代理守护进程。
键入 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% |
启动 Solaris 安全 Shell 会话。
myLocalHost% ssh myRemoteHost |
此时不会提示您输入口令短语。
在本示例中,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) |
只要通过自动启动代理守护进程 ssh-agent 来使用 Solaris 安全 Shell,即可避免提供口令短语和口令。可以通过 .dtprofile 脚本启动代理守护进程。要将口令短语和口令添加到代理守护进程,请参见示例 18–3。
在用户启动脚本中自动启动代理守护进程。
将以下行添加到 $HOME/.dtprofile 脚本的末尾:
if [ "$SSH_AUTH_SOCK" = "" -a -x /usr/bin/ssh-agent ]; then eval `/usr/bin/ssh-agent` fi |
退出 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 代理。
可以指定将本地端口转发到远程主机。实际上,分配了一个套接字用于侦听本地端的端口。从此端口到远程主机的连接基于安全通道。例如,可以指定端口 143 以使用 IMAP4 远程获取电子邮件。同样,也可以在远程端指定端口。
使用端口转发之前,管理员必须先在远程 Solaris 安全 Shell 服务器上启用端口转发。有关详细信息,请参见如何在 Solaris 安全 Shell 中配置端口转发。
以下示例说明如何使用本地端口转发来安全地接收来自远程服务器的邮件。
myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost |
此命令可将连接从 myLocalHost 上的端口 9143 转发到端口 143。端口 143 是 myRemoteHost 上的 IMAP v2 服务器端口。用户启动邮件应用程序时,需要指定本地端口号,如以下对话框中所示。
请勿将对话框中的 localhost 与 myLocalHost 混淆。myLocalHost 是假设的主机名,而 localhost 则是用于标识本地系统的关键字。
本示例说明企业环境中的用户如何将连接从外部网络中的主机转发到公司防火墙内的主机。
myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost |
此命令可将连接从 myOutsideHost 上的端口 9022 转发到本地主机上的端口 22(sshd 服务器)。
myOutsideHost% ssh -p 9022 localhost myLocalHost% |
以下过程说明如何使用 scp 命令在主机之间复制加密的文件。您可以在一台本地主机和一台远程主机之间,或者两台远程主机之间复制加密的文件。该命令的运行与 rcp 命令类似,不同的是 scp 命令会提示进行验证。有关更多信息,请参见 scp(1) 手册页。
也可以使用 sftp(一种形式更安全的 ftp 命令)。有关更多信息,请参见 sftp(1) 手册页。
启动安全的复制程序。
指定源文件、远程目标上的用户名和目标目录。
myLocalHost% scp myfile.1 jdoe@myRemoteHost:~ |
出现提示时,提供口令短语。
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <键入口令短语> myfile.1 25% |******* | 640 KB 0:20 ETA myfile.1 |
键入口令短语后,将会显示进度计量器。请参见以上输出中的第二行。进度计量器显示以下内容:
文件名
已传输的文件百分比
表示已传输的文件百分比的一系列星号
已传输的数据量
完整文件的估计到达时间 (estimated time of arrival, ETA),即剩余时间。
可以使用 Solaris 安全 Shell 建立从防火墙内的主机到防火墙外的主机的连接。通过在配置文件中指定 ssh 的代理命令或者在命令行中将该代理命令指定为选项,可以完成此任务。有关的命令行选项,请参见示例 18–6。
通常,可以通过配置文件自定义 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 |
在命令行中指定远程主机名时,将代理命令规范限制为实例。如果对 outside-host 使用通配符,则可将代理命令规范应用于一组主机。
指定代理命令。该命令可以是以下之一:
/usr/lib/ssh/ssh-http-proxy-connect,用于 HTTP 连接
/usr/lib/ssh/ssh-socks5-proxy-connect,用于SOCKS5 连接
这些选项分别指定代理服务器和代理端口。如果存在,则代理将覆盖指定代理服务器和代理端口的任何环境变量,如 HTTPPROXY、HTTPPROXYPORT、SOCKS5_PORT、SOCKS5_SERVER 和 http_proxy。http_proxy 变量指定 URL。如果不使用这些选项,则必须设置相关的环境变量。有关更多信息,请参见 ssh-socks5-proxy-connect(1) 和 ssh-http-proxy-connect(1) 手册页。
指定要连接到的特定主机。请在命令行中使用 %h 替换参数来指定主机。
指定要连接到的特定端口。请在命令行中使用 %p 替换参数来指定端口。通过指定 %h 和 %p 而不使用 Host outside-host 选项,只要调用 ssh 命令即可将应用代理命令到主机参数。
运行 Solaris 安全 Shell,从而指定外部主机。
例如,键入以下命令:
myLocalHost% ssh myOutsideHost |
此命令可在个人配置文件中查找 myOutsideHost 的代理命令规范。如果找不到规范,则该命令将在系统范围的配置文件 /etc/ssh/ssh_config 中查找。该代理命令将替换 ssh 命令。
如何设置到防火墙外部主机的缺省连接说明如何在配置文件中指定代理命令。在本示例中,在 ssh 命令行中指定代理命令。
% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \ -h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost |
ssh 命令的 -o 选项提供了指定代理命令的命令行方法。此示例命令可执行以下操作:
将 ssh 替换为 HTTP 代理命令
使用端口 8080 并将 myProxyServer 用作代理服务器
连接到 myOutsideHost 上的端口 22