第十五章 OpenSSH
15.1. 为什么使用 SSH?
15.2. 配置 OpenSSH 服务器
15.3. 配置 OpenSSH 客户
    15.3.1 使用 ssh 命令
    15.3.2 使用 scp 命令
    15.3.3 使用 sftp 命令
    15.3.4 生成钥匙对
OpenSSH是使用SSH(Secure SHell)协议的免费开放软件。它用加密的网络连接代替了 telnet 、 ftp 、 rlogin 、 rsh 和 rcp 工具。OpenSSH支持SSH协议的1.3、1.5、和 2版本。自OpenSSH 2.9版本以来,默认的SSH协议是版本2,默认使用 RSA 钥匙。

 

15.1. 为什么使用 SSH?
  • 安全性:所有使用 OpenSSH 工具的对话,包括口令,都会被加密,因此OpenSSH工具大大增进了系统的安全性。 telnet 和 ftp 使用纯文本口令,并被明文发送。这些信息可能会被截取,从而口令被破解,对你的系统造成危害。
  • 远程图形化显示:OpenSSH能自动把 DISPLAY 变量转给客户机器。换一句话说,如果你在本地机器上运行 X 窗口系统,并且使用 ssh 命令登录到了远程机器上,当你在远程机器上执行一个需要 X 的程序时,它会显示在你的本地机器上。如果你喜欢用图形化系统管理工具来远程管理你的系统,这就很便利。

TOP

15.2. 配置 OpenSSH 服务器

要运行 OpenSSH 服务器,你必须首先确定你安装了正确的 RPM 软件包: openssh 软件包和 openssh-server 软件包。OpenSSH 守护进程(daemon)使用 /etc/ssh/sshd_config 配置文件。缺省配置文件已能满足一般要求。如果你想自己定制它,请阅读 sshd 的说明书(man)页来获取配置文件中定义的关键字列表。要启动 OpenSSH 服务,使用 /sbin/service sshd start 命令。要停止 OpenSSH 服务器,使用 /sbin/service sshd stop 命令。

如果你重新安装了 Red Hat Linux 系统,客户端用户以前使用的身份标识钥匙将会改变。

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed. 

重装后的系统会为自己创建一组新的身份标识钥匙。如果你想保存系统原有的主机钥匙,备份 /etc/ssh/ssh_host*key* 文件,然后在系统重装后再复制回去。

TOP

15.3. 配置 OpenSSH 客户
要从客户机连接到 OpenSSH 服务器上,你必须在客户机器上装有 openssh-clients 和 openssh 软件包。 

TOP

15.3.1 使用 ssh 命令
ssh 命令是 rlogin、rsh 和 telnet 命令的安全替换。它允许你在远程机器上登录并在其上执行命令。
使用 ssh 来登录到远程机器和使用 telnet 相似。

  • 要登录到一个叫做 physics.njnu.edu.cn 的远程机器,在 shell 提示下键入下面的命令: 
     ssh physics.njnu.edu.cn 
    第一次使用 ssh 在远程机器上登录时,你会看到和下面相仿的消息:
     The authenticity of host ' physics.njnu.edu.cn ' can't be established.
    DSA key fingerprint is 94:68:3a:3a:bc:f3:9a:9b:01:5d:b3:07:38:e2:11:0c.
    Are you sure you want to continue connecting (yes/no)?  
    键入 yes 来继续。这会把该服务器添加到你的已知主机的列表中,如下面的消息所示:
     Warning: Permanently added ' physics.njnu.edu.cn ' (RSA) to the list of known hosts. 
    下一步,会询问远程主机上该用户口令。在输入口令后,你就会在远程主机的 shell 提示下了。如果你没有指定用户名,你在本地客户机器上登录用的用户名就会被传递给远程机器。如果你想指定不同的用户名,使用下面的命令:
     ssh username@penguin.example.net 
  • 你还可以使用 ssh -l username physics.njnu.edu.cn。
  • ssh 命令可以用来在远程机器上不经 shell 提示登录而执行命令。它的语法格式是: ssh hostname command 。譬如,如果你想在远程主机 physics.njnu.edu.cn 上执行 ls /usr/share/doc 命令,在 shell 提示下键入下面的命令:
     ssh  physics.njnu.edu.cn  ls /usr/share/doc 
    在你输入了正确的口令之后, /usr/share/doc 这个远程目录中的内容就会被显示,然后你就会被返回到你的本地 shell 提示下。

TOP

15.3.2. 使用 scp 命令

scp 命令可以通过安全、加密的连接在机器间传输文件。它与 rcp 相似。

  • 把本地文件传输给远程系统的一般语法是:
     scp localfile username@tohostname:/newfilename 
    localfile 指定源文件, username@tohostname:/newfilename 指定目标文件。要把本地文件 shadowman 传送到physics.njnu.edu.cn 上的 /home/ username /目录下 ,在 shell 提示下键入(把 username 替换成你的用户名):
     scp shadowman username@ physics.njnu.edu.cn :/home/username 
  • 把远程文件传输给本地系统的一般语法是:
     scp username@tohostname:/remotefile /newlocalfile 
    remotefile 指定源文件, newlocalfile 指定目标文件。
  • 源文件可以由多个文件组成。譬如,要把目录 /downloads 的内容传输到远程机器 physics.njnu.edu.cn 上现存的 uploads 目录,在 shell 提示下键入下列命令:
     scp /downloads/* username@ physics.njnu.edu.cn :/uploads/ 

TOP

15.3.3. 使用 sftp 命令

sftp 工具可以用来打开一次安全交互的 FTP 会话。它与 ftp 相似, 只不过,它使用安全、加密的连接。它的一般语法是: sftp username@hostname.com 。一旦通过 验证,你可以使用一组和 FTP 相似的命令。请参阅 sftp 的说明书页(man)来获取这些 命令的列表。 sftp 工具只在 OpenSSH 版本 2.5.0p1 以上才有。

TOP

15.3.4. 生成钥匙对

如果你不想每次使用 ssh 、 scp 或 sftp 时都要输入口令来连接远程机器,你可以生成一对授权钥匙。

钥匙必须为每个用户生成。要为某用户生成钥匙,用想连接到远程机器的用户身份来遵循下面的步骤。如果你用根用户的身份完成了下列步骤,就只有根用户才能使用这对钥匙。

从 OpenSSH 版本 3.0 开始, ~/.ssh/authorized_keys2 、 ~/.ssh/known_hosts2 和 /etc/ssh_known_hosts2 就会过时。SSH 协议 1 和 2 共享 ~/.ssh/authorized_keys 、 ~/.ssh/known_hosts 和 /etc/ssh/ssh_known_hosts 文件。

Red Hat Linux 9 默认使用 SSH 协议 2 和 RSA 钥匙。(如果你重装了 Red Hat Linux,但是想保留现有的钥匙对,备份你的主目录中的 .ssh 目录。重装后,把该目录复制回主目录。该方法适用于系统上的所有用户。)

15.3.4.1. 为版本 2 生成 RSA 钥匙对

使用下列步骤来为 SSH 协议的版本 2 生成 RSA 钥匙对。

  1. 要生成适用于版本2的 RSA 钥匙,在 shell 提示下键入下列命令:

     ssh-keygen -t rsa 

    接受 ~/.ssh/id_rsa 密钥存储的默认位置。输入一个与你的帐号口令不同的口令句,再输入一次来确认。

    公钥被写入 ~/.ssh/id_rsa.pub 。密钥被写入 ~/.ssh/id_rsa 。

  2. 使用 chmod 755 ~/.ssh 命令改变你的 .ssh 目录的许可权限。

  3. 把 ~/.ssh/id_rsa.pub 的内容复制到你想连接的机器上的 ~/.ssh/authorized_keys 文件中。如果 ~/.ssh/authorized_keys 不存在,你可以把 ~/.ssh/id_rsa.pub 文件复制到那个机器上的 ~/.ssh/authorized_keys 文件中。

15.3.4.2. 为版本 2 生成 DSA 钥匙对

使用下面的步骤来为 SSH 协议的版本 2 生成 DSA 钥匙对。

  1. 要生成用于协议的版本 2 的 DSA 钥匙对,在 shell 提示下键入下面的命令:

  2.  ssh-keygen -t dsa 

    接受 ~/.ssh/id_dsa 的默认位置。输入一个与你的帐号口令不同的口令句,再输入一次来确认。

  3. 公钥被写入 ~/.ssh/id_dsa.pub 。密钥被写入 ~/.ssh/id_dsa 。决不能把密钥出示给任何人,这一点很重要。

  4. 使用 chmod 755 ~/.ssh 命令改变你的 .ssh 目录的许可权限。

  5. 把 ~/.ssh/id_dsa.pub 的内容复制到你想连接的机器中的 ~/.ssh/authorized_keys 文件中。如果文件 ~/.ssh/authorized_keys 不存在,你可以把 ~/.ssh/id_dsa.pub 文件复制到那个机器上的 ~/.ssh/authorized_keys 文件中。

  6. 如果你运行的是 GNOME,跳到第 15.3.4.4 节。如果你没在运行 X 窗口系统,跳到 第 15.3.4.5 节

15.3.4.3. 为版本 1.3 和 1.5 生成 DSA 钥匙对

使用下面的步骤来生成用于 SSH 协议版本 1 的 RSA 钥匙对。如果你只在使用 DSA 的系统间连接,则不需要 RSA 版本 1.3 或 RSA 版本 1.5 钥匙对。

  1. 要生成 RSA (版本 1.3 和 1.5 协议)钥匙对,在 shell 提示下键入下列命令:

     ssh-keygen -t rsa1 

    接受默认的位置 ( ~/.ssh/identity )。输入和你的帐号口令不同的口令句。再输入一次来确认。

    公钥被写入 ~/.ssh/identity.pub 。密钥被写入 ~/.ssh/identity 。不要把你的密钥出示给任何人。

  2. 使用 chmod 755 ~/.ssh 和 chmod 644 ~/.ssh/identity.pub 命令改变你的 .ssh 目录和密钥的许可权限。

  3. 把 ~/.ssh/identity.pub 的内容复制到你想连接的机器中的 ~/.ssh/authorized_keys 文件中。如果文件 ~/.ssh/authorized_keys 不存在,你可以把 ~/.ssh/identity.pub 文件复制到远程机器上的 ~/.ssh/authorized_keys 文件中。

15.3.4.4. 在 GNOME 中配置 ssh-agent

ssh-agent 工具可以用来保存你的口令句,因此你不必在每次引发 ssh 或 scp 连接时都输入口令。如果你在使用 GNOME, openssh-askpass-gnome 工具可以用来在你登录到 GNOME 时提示你输入口令句,并把它一直保留到你从 GNOME 中注销之时。你不必为本次 GNOME 会话中任何 ssh 或 scp 连接输入口令或口令句。如果你不打算使用 GNOME,请参阅第 15.3.4.5 节

要在 GNOME 会话中保存口令句,遵循下列步骤:

  1. 你需要安装 openssh-askpass-gnome 软件包;你可以使用 rpm -q openssh-askpass-gnome 命令来判定该软件包是否已被安装。如果它没有被安装,从你的 Red Hat Linux 光盘集合、Red Hat FTP 镜像站点、或使用 Red Hat 网络 来安装它。

  2. 点击「主菜单」(在面板上)=> 「首选项」 => 「更多首选项」 => 「会话」。然后点击「启动程序」标签。点击「增加」,在「启动命令」文本字段内输入 /usr/bin/ssh-add 。把它的优先级设为比任何现存命令都高的数字以确保它最后才执行。 ssh-add 的优先级数字最好是 70 或更高。优先级数字越高,优先级越低。如果你列出了其它程序,该程序的优先级应该最低。点击「关闭」来退出该程序。

  3. 注销后再登录进 GNOME;换一句话说,重新启动 X 服务器。在 GNOME 启动后,一个提示你输入口令句的对话框就会出现。输入要求的口令句。如果你把 DSA 和 RSA 两者都配置了,你会被提示两者都输入。从现在起,你就不会被 ssh 、 scp 或 sftp 提示输入口令了。

15.3.4.5. 配置 ssh-agent

ssh-agent 可以用来储存你的口令句,因此你在每次使用 ssh 或 scp 连接时就不必总是输入它。如果你不在运行 X 窗口系统,则在 shell 提示中遵循这些步骤。

  1. 在 shell 提示下,键入下面的命令:

     exec /usr/bin/ssh-agent $SHELL 
  2. 然后,键入下面的命令:

     ssh-add  

    接着,输入你的口令。如果你配置了不止一个钥匙对,你会被提示输入每个口令。

  3. 当你注销后,口令句就会被忘记。你必须在每次登录到虚拟控制台或打开终端窗口时都执行这两条命令。

TOP