当我们需要安全地连接到远程服务器时,需要一种比简单密码更安全的方法,SSH可以提供必要级别的保护。
什么是 SSH?
SSH代表安全外壳。它是一种基于加密的网络协议,用于安全地远程访问计算机和服务器。SSH 中使用的技术通过加密传输的所有数据(包括密码和命令)在客户端和服务器之间提供安全通道。
如何使用 SSH?
SSH 允许用户安全地登录远程系统并执行命令,就像直接与本地机器交互一样。
通过 SSH 进行连接需要 SSH 服务器和 SSH 客户端。SSH 服务器侦听 TCP/IP 端口上的连接,并在客户端请求连接时进行身份验证,然后开始为客户端提供服务,允许用户使用服务器。SSH 客户端用于登录远程计算机并执行必要的命令。
你还需要在开始时创建一个私钥和一个公钥,然后将公钥添加到服务器。私钥由用户存储,用于访问服务器。
我必须使用命令行吗?
如果您想从 Windows 操作系统连接到远程服务器,只需在计算机上安装一个特殊实用程序(PuTTY、SecureCRT、ShellGuard、Axessh 或其他)。在这种情况下,所有操作都使用图形界面执行,仅在某些情况下使用命令行。
如果您从 Linux 或 MacOS 进行连接,除了安装特殊实用程序(Openssh、kdessh、lsh-client 等)之外,您还需要内置的终端实用程序。在终端中,您需要输入命令来连接到远程服务器。
什么是 SSH 密钥?
SSH 密钥是 SSH 协议中用于安全身份验证的一对加密密钥。密钥对由一个公钥和一个私钥组成。公钥驻留在远程服务器上,而私钥则安全地存储在用户的计算机或设备上。
当用户尝试与服务器建立 SSH 连接时,服务器会向客户端发送请求。客户端使用其私钥创建数字签名,并将其发送回服务器。服务器可以使用存储在服务器上的相应公钥来验证此签名。如果签名有效,则授予客户端访问权限。
SSH 密钥是一种比传统的基于密码的身份验证更安全、更方便的替代方案。它们消除了通过网络传输密码的需要,并且可以抵御暴力攻击。系统管理员、开发人员和其他经常访问远程服务器的用户通常使用 SSH 密钥。
SSH 命令示例
以下命令用于直接使用 SSH 密钥:
- ssh。此命令用于建立与远程服务器的 SSH 连接。它通常如下所示:ssh username@hostname。
- scp。scp(安全复制)命令允许通过 SSH 连接在本地计算机和远程服务器之间安全地传输文件。其用法如下:scp [options] <source> <destination>。
- ssh-keygen。此命令用于生成 SSH 密钥对。它会创建公钥和私钥文件。基本语法是ssh-keygen [options]。例如,ssh-keygen -t rsa会生成 RSA 密钥对。
- ssh-copy-id。生成 SSH 密钥对后,可以使用ssh-copy-id命令将公钥复制到远程服务器,提供免密码认证。该命令使用方式如下:ssh-copy-id username@hostname。
- ssh-agent。这是管理 SSH 密钥的程序。它将解密的私钥存储在内存中。您可以使用 ssh-agent 命令运行它,然后使用ssh-add添加您的私钥。
SSH 还允许您使用导航、数据库、文件、目录、档案及其内容(创建目录和文件、复制、移动、重命名、删除文件和目录等)。还有一组命令可用于此目的。
如何启用 SSH 连接
检查 SSH 是否已启用,因为许多 Linux 发行版和 MacOS 系统默认安装它。要检查 SSH 是否已启用,请打开终端并输入以下命令
ssh 本地主机
如果您看到“连接被拒绝”或“连接超时”等消息,则表示当前未启用或配置 SSH。如果您收到要求输入密码或密码短语的响应,则表示 SSH 已启用。
如果需要,请设置 SSH。在基于 Ubuntu 或 Debian 的系统上,您可以通过运行以下命令来执行此操作
sudo apt-get 安装 openssh-server
在 MacOS 上,SSH 通常是预先安装的。
Windows 上没有预装 SSH(例如 OpenSSH;通过开始 – 设置 – 应用程序 – 应用程序和功能 – 高级组件检查此组件)。
安装 SSH 后,可能需要进行配置,但可以保留默认配置。SSH 服务器配置文件通常位于 Linux 系统上的 /etc/ssh/sshd_config、MacOS 上的 /etc/sshd_config 和 Windows 上的 C:\ProgramData\ssh\sshd_config。
使用管理员权限打开配置文件(sudo nano /etc/ssh/sshd_config)并进行必要的更改:
- 端口。默认情况下,SSH 监听端口 22。出于安全原因,您可以将其更改为其他端口。
- AllowUsers 或 AllowGroups。在此指定允许哪些用户或组通过 SSH 连接。
- PasswordAuthentication。设置为“yes”以允许基于密码的身份验证,或设置为“no”以强制基于密钥的身份验证。
- PermitRootLogin。如果要允许 root 用户通过 SSH 登录,请设置为“yes”。为了提高安全性,建议将其设置为“no”,并使用普通用户帐户。
完成更改后,保存文件并重新启动 SSH 服务。在基于 Ubuntu 或 Debian 的系统上,命令如下:
sudo 服务 ssh 重启
在 MacOS 上,保存配置文件后会自动重新启动 SSH 服务。
如果启用了防火墙,您将需要使用以下命令允许传入的 SSH 连接:
sudo ufw 允许 ssh
要授予 Windows 权限,请按照以下步骤操作
- 打开高级安全 Windows Defender 防火墙。您可以在“开始”菜单中搜索它。
- 单击左侧窗格中的“入站规则”。
- 单击右侧窗格中的“新规则”。
- 选择“端口”并点击“下一步”。
- 选择“特定本地端口”,输入SSH端口号(默认为22),点击“下一步”。
- 选择“允许连接”并点击“下一步”。
- 选择规则适用的网络类型(例如,域、私有、公共)。单击“下一步”。
- 为规则提供名称(例如“SSH”)。单击“完成”。
完成这些步骤后,您将需要创建一个 SSH 密钥并使用 SSH 客户端连接到远程服务器。
如何创建 SSH 密钥
可以在特殊的在线服务中或使用针对操作系统(Windows、Linux、MacOS)定制的实用程序在 PC 上生成 SSH 密钥。
SSH 密钥 Windows
对于 Windows,我们建议使用 PuTTY 实用程序(PuTTYgen 应用程序会自动安装以生成密钥,请从官方网站下载)。密钥生成在应用程序内部通过清晰的 GUI 界面完成,然后必须将公钥(具有 .pub 扩展名)复制到服务器的 authorized_keys 文件中。
SSH 密钥 Linux 和 MacOS
要在 Linux 或 MacOS 系统上创建 SSH 密钥,我们建议使用终端中的两个命令(sudo apt update和sudo apt install openssh-client)和 OpenSSH 服务器(sudo apt update和sudo apt install openssh-server)安装 OpenSSH 客户端。然后继续在终端中工作:
- 运行命令
ssh-keygen -t rsa -b 2048
- 选择密钥对的保存路径。
生成公钥/私钥 RSA 密钥对。
输入保存密钥的文件(/root/.ssh/id_rsa):
- 按“Enter”键将把密钥保存到主目录的 .ssh 目录。
- 如果您不想每次使用私钥时都输入密码,只需按“Enter”即可。
输入密码(无密码则为空):
再次输入相同的密码:
- 密钥对已创建。屏幕上将显示其他信息。
id_rsa是私钥文件的标准名称。
id_rsa.pub是公钥文件的标准名称。使用私钥时,必须将此密钥复制到要访问的服务器。
如何通过 SSH 访问服务器
SSH Linux 和 MacOS
对于 Linux/MacOS 连接,与密钥生成一样,使用内置终端实用程序。
- 要在终端中建立与服务器的连接,请运行包含两个组件的命令:root – 登录和 192.168.77.77 – 服务器的 IP 地址:
ssh root@192.168.77.77 - 如果您是第一次连接,则需要在弹出通知中确认并按 Enter。
- 输入密码并按 Enter。
完成!您已连接到服务器。
SSH 窗口
要使用 Windows 操作系统连接到服务器,您需要登录 PuTTY。这是我们生成密钥的地方。
- 在第一个窗口(下面的屏幕截图)中,输入主机名(服务器的 IP 地址)和端口(SSH 的默认端口为 22)。如有必要,请保存会话(保存)。
- 然后在弹出的窗口中点击打开并同意,确认连接。
- 在打开的控制台中输入 Login as (root) 和 Password。然后按 Enter。
完成!您已连接到服务器。
使用 SSH 的最佳实践
- 出于安全考虑,更改默认 SSH 端口。
- 实施双因素身份验证。
- 将 SSH 密钥与个人关联,而不仅仅是多个用户使用的共享帐户。
- 通过仅允许访问某些区域来执行最小特权原则 (PoLP)。
- 实施更改 SSH 密钥的策略(不要对多个帐户和会话使用相同的组合)。
一般来说,使用 SSH 安全连接到远程服务器的步骤不止于此。SSH 连接本身比其他连接服务器的方式更安全,而且学习起来也不那么困难。