Product SiteDocumentation Site

9.2. 远程登录

对于管理员来说有必要远程连接电脑。位于单独房间的服务器,很少配置固定的键盘和显示器-但是他们都会接到网络。

9.2.1. 安全远程登录:SSH

SSH (Secure SHell) 通信协议系以安全与可靠考量。以 SSH 连接是安全的:伙伴需认证且数据交换经过加密。
SSH 还涉及两个文件传输服务。 scp 是一个可以像cp命令一样使用的命令行工具,除了指向其他机器的路径需要加机器名冒号前缀。
$ scp file machine:/tmp/
sftp 是一个交互命令,类似于 ftp。在一个单独会话中, sftp 可以传输多个文件,并且可以远程操作文件(删除,重命名,更改许可,等等)。
Debian 使用 OpenSSH,一个由 OpenBSD 项目(注重安全,基于 BSD 内核的自由操作系统)维护的自由版本,它效仿了芬兰 SSH Communications Security Corp 公司开发的原始 SSH 软件。该公司最初将 SSH 作为自由软件开发,但是最终决定在专有许可下继续开发。然后,OpenBSD 项目创建了 OpenSSH 维护 SSH 的自由版本。
OpenSSH 分裂为两个软件包:客户端是 openssh-client 软件包,服务器端是 openssh-server 软件包。ssh 超软件包依赖这两个部分且需安装它们 (apt install ssh)。

9.2.1.1. 基于密钥的认证

每次有人通过 SSH 登入,远程服务器询问密码来授权用户。如果想要自动连接或者使用需要频繁通过 SSH 连接的工具,这就会产生问题。这就是为什么 SSH 提供一种基于密钥的认证系统。
户在客户机上用 ssh-keygen -t rsa 产生密钥对;公共密钥存储在~/.ssh/id_rsa.pub中,而对应的私有密钥存储在~/.ssh/id_rsa中。然后,用户使用ssh-copy-id server 将他们的公共密钥添加到服务器上的 ~/.ssh/authorized_keys 文件中。如果私有密钥在创建的时候没有“口令密语”保护,随后所有在服务器上的登录将不需要口令。然而,私有密钥在每次输入口令时都必须被解密。幸运的是, ssh-agent 允许我们把私有密钥放在内存中而不必频繁重新输入口令。为此,可以简单的使用 ssh-add (每个工作会话一次)来指明该会话已经和 ssh-agent功能实例相关联。Debian 在图形界面会话中默认激活这一特性,也可以通过改变 /etc/X11/Xsession.options来停用。对于控制台会话,可以使用 eval $(ssh-agent)手动启动。

9.2.1.2. 使用远程 X11 应用程序

SSH 协议允许转发图形数据(“X11”会话,源于最广泛传播Unix图形系统的名字);然后,服务器为这些数据保留固定通道。特别地,远程执行的图形程序可以在本地系统X.org服务器屏幕上显示,并且整个会话(输入和显示)都是安全的。由于该特性允许远程应用与本地系统交互,因此默认是关闭的。您可以指明X11Forwarding yes参数,将其写入服务器配置文件(/etc/ssh/sshd_config)以启用该功能。最后,用户必须通过添加 -X 选项到 ssh 命令行中以提出功能请求。

9.2.1.3. 通过端口转发建立加密通道

它的 -R-L 选项允许 ssh 在两个机器间添加 “加密信道”,把本地 TCP 端口 (见专栏 基本 TCP/UDP) 映射至远程机器或反之。
运行ssh -L 8000:server:25 intermediary 命令,将会建立同服务器主机intermediary 的SSH 会话,并侦听本地端口8000 ¼ˆ参考see 图 9.3 “使用SSH转发本地端口”)。对于任何建立在该端口的连接, ssh 将会发起从电脑intermediaryserver 端口25 的连接,并将两个连接绑定。
命令ssh -R 8000:server:25 intermediary也会建立电脑 intermediary 的SSH 会话,但是在本机 ssh 侦听端口8000 (参考 图 9.4 “使用SSH转发远程端口”)。在该端口建立的连接将ssh 打开本机到 server25 端口的连接,并将两个连接绑定。
两种情况下,连接建立在server 主机的25 端口,它会透过SSH 隧道建立本地机器和中介机器的连接。在头一种情况下,到该隧道的入口是本地端口8000,数据在定向到公共网络的server 之前,流向 intermediary 。在第二种情况下,隧道输入输出被保留;入口是 intermediary 的8000 端口,输出在本地主机,然后数据被定向到 server。实际上,服务器不是本地机器就是中介机器。这样SSH 保护了一端到另一端的连接。
使用SSH转发本地端口

图 9.3. 使用SSH转发本地端口

使用SSH转发远程端口

图 9.4. 使用SSH转发远程端口

9.2.2. 使用远程图形桌面

VNC (Virtual Network Computing)允许远程接入图形桌面。
该工具主要用于技术支持;管理员可以看到用户面临的错误,并演示正确的操作而不必待在他们旁边。
首先,用户必须授权共享其进程。在 Jessie 配置面版 (不同于稍早的 Debian 版本,用户必须安装并运行 vino) 的GNOME 图形桌面环境已有此选项。KDE 桌面环境仍需使用 krfb 才能经由 VNC 共享既有的进程。其他皂图形桌面环境,x11vnc 命令 (在同名的 Debian 软件包内) 也能达到同样的结果;以明确的图标标明。
从 VNC 取得图形进程时,管理者必须链接至 VNC 客户端。GNOME 有 vinagreremmina 命令链接,而 KDE 使用 krdc (在 KInternetRemote Desktop Client 菜单内)。还有使用命令行的其他 VNC 客户端,诸如 xvnc4viewer 在 Debian 的同名软件包内。链接后,管理者可以看到远程的桌面、操控远程桌面、并让远程用户知道运作的方式。
VNC 也可供移动用户、或公司运行者使用,这些人偶而需要从家中的电脑远程登录办公室的桌面电脑。这种配置稍为复杂些:首先安装 vnc4server 软件包,改变显示管理者的配置,以便接受 XDMCP Query 请求 (给 gdm3,添加 Enable=true/etc/gdm3/daemon.conf 的 “xdmcp” 区块),然后以 inetd 启动 VNC 服务器,接着在用户试图登录时,自动开启进程。例如,可以在 /etc/inetd.conf 内加入这一列:
5950  stream  tcp  nowait  nobody.tty  /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 16 securitytypes=none
重新定向输入链接至显示管理者,解决认证的问题,因为只有本地帐号的用户才能通过 gdm3 登录画面 (或同级的 kdmxdm等)。当此作业允许同时登录多个用户 (服务器够力是前提),就能够提供完整的桌面给远程用户 (或稍为不够力的桌面系统,则需要配置为精简客户)。使用只需以 vncviewer server:50 登录服务器画面,因为用到的端口号是 5950。