远程访问机器早已成为一种必需,我们几乎无法想象如果不能远程控制计算机会是什么样子。根据您所运行的操作系统,有许多方式可以与远程机器建立连接,但最常用的两种协议是:
- RDP 协议(Remote Desktop Protocol)用于 Windows 机器
- Secure Shell(SSH)主要用于 Linux,但也可用于 Windows。
这两种协议都使用客户端和服务器应用程序来建立远程连接。这些工具让您能够远程访问和管理其他计算机、传输文件,并且几乎可以完成您在物理上坐在机器前所能做的一切。
前提条件
在能够与远程机器建立安全连接之前,您必须满足几项基本要求:
- 远程计算机必须始终处于开机状态并具备网络连接。
- 您需要知道想要连接的远程机器的 IP 地址或名称。
- 您必须拥有访问远程计算机所需的权限。
- 防火墙设置必须允许远程连接。
- 客户端和服务器应用程序必须已安装并正常运行。

什么是 SSH?
Secure Shell,有时也称为 Secure Socket Shell,是一种协议,让您能够通过文本界面安全地连接到远程计算机或服务器。
当安全的 SSH 连接建立后,会启动一个 shell 会话,您可以在本地计算机的客户端中输入命令来操作服务器。
系统和网络管理员最常使用这一协议,任何需要以高度安全的方式远程管理计算机的人也会用到它。
SSH 如何工作?
要建立 SSH 连接,您需要两个组件:一个客户端和相应的服务器端组件。SSH 客户端是您安装在用来连接另一台计算机或服务器的机器上的应用程序。
客户端使用所提供的远程主机信息发起连接,如果凭据通过验证,就会建立加密连接。

1. 客户端向 SSH 服务器发起连接。
2. 服务器将其公钥发送给客户端。
3. 服务器的公钥被记录到客户端的已知主机文件中。
4. 客户端和服务器协商连接参数并建立连接。
在服务器端,有一个称为 SSH 守护进程的组件,持续监听某个特定的 TCP/IP 端口,以等待可能的客户端连接请求。一旦客户端发起连接,SSH 守护进程会回应它所支持的软件和协议版本,双方随后交换各自的身份数据。如果所提供的凭据正确,SSH 会为相应的环境创建一个新会话。
SSH 服务器与 SSH 客户端之间通信所用的 SSH 协议默认版本为第 2 版。
如何建立 SSH 连接
由于创建 SSH 连接同时需要客户端和服务器端组件,您必须确保它们分别安装在本地机器和远程机器上。一款广泛用于 Linux 发行版的开源 SSH 工具是 OpenSSH。安装 OpenSSH 相对简单。
它需要在服务器以及您用来连接的计算机上访问终端。请注意,Ubuntu 默认不一定安装了 SSH 服务器。
A. 如何安装 OpenSSH 服务器
要接受 SSH 连接,一台机器必须具备 SSH 软件工具包中服务器端的部分。
要检查需要接受 SSH 连接的远程计算机的 Linux 系统上是否已安装 OpenSSH 服务器,您可以尝试连接到本地主机自身:
- 在服务器机器上打开一个终端。
- 输入 ssh localhost 并按回车。
- 对于未安装 SSH 服务器的系统,响应会类似这样:
username@host:~$ ssh
ssh: connect to host localhost port 22: Connection refused
若确实如此,您就需要安装 OpenSSH 服务器。保持终端打开,执行以下命令来安装 SSH 服务器:
sudo apt-get install openssh-server
所需文件将被安装,随后您可以输入以下命令来检查机器上的 SSH 服务器是否正在运行:
sudo systemctl status ssh
如果 SSH 服务正常运行,响应应类似这样:

另一种测试 OpenSSH 服务器是否正确安装并接受连接的方法,是在终端提示符中再次尝试执行 ssh localhost 命令。
ssh localhost
首次连接一个未知主机时需要进行确认。
"Are you sure you want to continue connecting?"
输入 yes 以继续,然后输入您用户的密码。
第一次执行该命令时,结果会类似这样:

这里您通过所谓的「localhost」连接,连到了您自己的服务器,也就是本地主机自身。我们很快会看到如何访问远程服务器,也就是从另一台主机进行访问!
恭喜!您已经把服务器配置为接受 SSH 连接请求。
B. 如何安装 SSH 客户端
在着手安装 SSH 客户端之前,请确认它是否已经安装。许多 Linux 发行版默认已带有 SSH 客户端。
对于 Windows 系统,您可以安装 PuTTY 或您选择的任何其他客户端来访问服务器。PuTTY 官方下载链接。

对于 Linux 系统,您可以检查客户端是否已安装:
- 在终端中输入 ssh 并按回车。
- 如果客户端已安装,您会收到类似这样的响应:

这意味着您已准备好远程连接一台物理机或虚拟机。否则,您需要执行以下命令来安装 OpenSSH 客户端:
sudo apt-get install openssh-client
从此以后,只要您拥有访问所需的权限以及主机名或 IP 地址,就可以使用 SSH 连接到任何安装了服务器应用程序的机器。
如何通过 SSH 连接
既然 SSH 客户端和服务器都已安装,您就可以与您的服务器建立安全的远程连接了。操作方法如下:
两种连接方式可选:A 或 B。
A. 从 Windows 客户端(例如 PuTTY)连接
- 记下您服务器的 IP 地址。在 Ubuntu 上使用命令:ip address
- 打开 PuTTY 或任何其他终端仿真软件。
- 选择 SSH 连接类型,并确认处于端口 22
- 填写远程服务器的 IP 地址或主机名。
- 点击「Open」以打开连接

B. 从终端连接
- 在您的机器上打开 SSH 终端,执行以下命令:ssh your_username@host_ip_address 如果您本地计算机上的用户名与您尝试连接的服务器上的用户名相同,可以直接输入:ssh host_ip_address 然后按回车。
- 输入您的密码并按回车。请注意,输入时屏幕上不会有任何反馈。如果您粘贴密码,请确保它被安全地存储,而不是保存在文本文件中。
- 当您第一次连接一台服务器时,它会询问您是否希望继续连接。只需输入 yes 并按回车。此消息仅会出现这一次,因为该远程服务器尚未在您的本地机器上被识别。
- 现在会添加一个 ECDSA 密钥指纹,您就连接到了远程服务器。
如果您尝试远程连接的计算机位于同一网络中,最好使用私有 IP 地址而不是公有 IP 地址。否则,您就只能使用公有 IP 地址。此外,请确保您知道 OpenSSH 用于监听连接请求的正确 TCP 端口,并且端口转发设置正确。如果没有人在 sshd_config 文件中修改配置,默认端口是 22。您也可以直接在主机 IP 地址后面加上端口号。
配置 OpenSSH 服务器
在这第一步中,您将实施一些初始的加固配置,以提升 SSH 服务器的整体安全性。
您通过标准 OpenSSH 服务器配置文件所实施的大多数 OpenSSH 配置,都位于 /etc/ssh/sshd_config 中。
通过修改 SSH 守护进程的配置文件,您可以例如更改 SSH 连接的默认端口。
如果您需要安装 nano,请执行以下命令:
sudo apt-get install nano
请注意,每次对 sshd_config 文件做出修改后,都需要执行以下命令重启 SSH 服务,修改才会生效:
sudo service ssh restart
在继续之前,建议您对现有配置文件做一份备份,以便在出现问题时能够将其还原。
使用以下命令对文件进行备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
这会把该文件的一份副本保存到 /etc/ssh/sshd_config.bak。
在终端提示符中,执行以下命令:
sudo nano /etc/ssh/sshd_config
配置文件将在您选择的编辑器中打开。这里我们使用了 nano。
备注:OpenSSH 服务器配置文件包含许多选项和默认配置。根据您现有的服务器配置,某些推荐的加固选项可能已经被设置。
在编辑配置文件时,某些选项可能默认以行首的单个井号( #)注释掉。要修改这些选项,或让被注释的选项生效,您需要删除井号来取消注释。
首先,通过设置以下选项,禁用以 root 用户身份进行的 SSH 登录:
PermitRootLogin no
这非常有益,因为它会阻止潜在攻击者直接以 root 身份登录。它还鼓励良好的运维安全实践,例如以非特权用户身份运行,仅在绝对必要时使用 sudo 提升权限。
接下来,您可以通过配置以下项,限制某次登录会话的最大身份验证尝试次数:
MaxAuthTries 3
标准值 3 对大多数配置来说是可接受的,但您可以根据自己的风险承受阈值将其设得更高或更低。
如有需要,您还可以设置一个较短的登录宽限期,即用户在首次连接您的 SSH 服务器后完成身份验证所拥有的时间:
LoginGraceTime 20
配置文件以秒为单位指定该值。
把该值设为较小的数值有助于防范某些拒绝服务攻击,在这类攻击中,多个身份验证会话会被长时间保持打开。
如果您已配置 SSH 密钥用于身份验证,而不是使用密码,请禁用 SSH 密码身份验证,以防止泄露的用户密码让攻击者得以登录。在尚未使用 SSH 密钥之前,我们会将该参数保留为 yes。
PasswordAuthentication yes
作为与密码相关的一项额外加固措施,您还可以禁用使用空密码的身份验证。如果某个用户的密码被设置为空值,这将阻止其连接:
PermitEmptyPasswords no
在大多数使用场景中,SSH 会被配置为以公钥身份验证作为唯一使用的身份验证方法。不过,OpenSSH 服务器还支持许多其他身份验证方法,其中一些默认启用。如果这些并非必需,您可以将它们禁用,以进一步缩小 SSH 服务器的攻击面。
#安全 #linux
