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)允许远程接入图形桌面。
该工具主要用于技术支持;管理员可以看到用户面临的错误,并演示正确的操作而不必待在他们旁边。
First, the user must authorize sharing their session. The GNOME graphical desktop environment in Jessie includes that option in its configuration panel (contrary to previous versions of Debian, where the user had to install and run vino). KDE Plasma still requires using krfb to allow sharing an existing session over VNC. For other graphical desktop environments, the x11vnc command (from the Debian package of the same name) serves the same purpose; you can make it available to the user with an explicit icon.
When the graphical session is made available by VNC, the administrator must connect to it with a VNC client. GNOME has vinagre and remmina for that, while the KDE project provides krdc (in the menu at KInternetRemote Desktop Client). There are other VNC clients that use the command line, such as xvnc4viewer in the Debian package of the same name. Once connected, the administrator can see what is going on, work on the machine remotely, and show the user how to proceed.
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。