SSH 命令

2025年03月17日 | 阅读 9 分钟

SSH 是 "Secure Shell" 的缩写。SSH 可以定义为一个用于安全连接到远程系统或服务器的协议。它是安全的,因为它可以以加密格式在客户端和主机之间传输信息。

它还可以将客户端的输入传输到主机。此命令在 TCP/IP22 端口上执行。

SSH 命令语法

SSH 命令的先决条件

在我们可以使用远程计算机创建安全的远程桌面协议之前,这里有一些命令要求需要满足:

  • 远程计算机应始终开启并具有网络连接。
  • 服务器和客户端应用程序必须已启用并安装。
  • 我们需要连接的远程计算机的名称或 IP 地址。
  • 我们需要拥有访问远程系统的必要权限。
  • 需要各种防火墙设置来允许远程连接。

SSH 命令的组成部分

Linux 中的SSH 命令包含 3 个不同的部分,如下所述:

  • ssh 命令指导系统与主机建立加密的安全连接。
  • user_name(用户名)表示正在主机上进行身份验证的帐户。
  • host(主机)可以定义为一台计算机,它可以是路由器或正在进行身份验证的计算机。它可以是一个域名(例如 www.domainname.com)或一个 IP 地址(例如 192.168.1.124)

注意:命令将在登录到主机计算机后,直接在主机终端上执行。
使用 SSH 密钥对或公钥-私钥对登录远程主机比使用密码更安全。

要生成公钥-私钥,我们可以使用以下命令:

私钥应保持隐藏,而公钥应复制到远程主机。

将公钥复制到远程主机后,连接将不再通过密码,而是通过 SSH 密钥建立。

SSH 命令中的选项

Linux 中的 SSH 命令有各种选项。这些选项解释如下:

  1. -1: 用于强制 ssh 命令仅应用 SSH-1 协议。
  2. -2: 用于强制 ssh 命令仅应用 SSH-2 协议。
  3. -4: 用于仅允许 IPv4 地址。
  4. -6: 用于仅允许 IPv6 地址。
  5. -a: 用于启用身份验证代理连接转发过程。
  6. -A: 用于禁用身份验证代理连接转发过程。
  7. -C: 用于压缩所有数据(包括 stderr、stdout、stdin 以及 TCP 和 X11 转发连接的数据),以实现更快速的数据传输。
  8. -f: 用于在执行命令之前,请求 ssh 命令进入后台。
  9. -g: 用于允许其他远程主机连接到本地转发的端口。
  10. -p port_number: 这是在远程主机上连接的端口。
  11. -n: 用于防止从 stdin 读取。
  12. -q: 用于抑制所有警告和错误。
  13. -V: 用于显示版本号。
  14. -v: 代表详细模式(Verbose mode),用于在创建任何连接时回显所有操作。此选项在连接失败调试时非常有用。
  15. -X: 用于启用 X11 转发或 GUI 转发。
  16. -c cipher_spec: 用于选择加密会话的密码算法规范。只有当服务器和客户端都支持时,才会选择特定的密码算法。

值得注意的是,与 telnet 等其他各种协议相比,ssh 由于数据加密而更安全。

SSH 协议使用的三种广泛的加密技术如下:

1. 对称加密:对称加密基于使用单个密钥进行数据加密和解密的原理。生成的密钥在主机和客户端之间共享,以实现更安全的连接。这种加密技术最常见,并且在单个机器上进行数据解密和加密时效果最佳。

2. 非对称加密:非对称加密技术更安全,因为它会生成两种不同的密钥,如下所示:

  • 公钥
  • 私钥
    在私钥安全地保留在客户端机器上时,公钥会被共享到不同类型的主机。任何安全连接都通过公钥-私钥对建立。

3. 散列(Hashing):在此方法中,单向散列可以定义为一种身份验证方法,可确保数据未被篡改并且来自合法发送者。

散列函数可用于通过数据生成散列码。有可能通过散列值重新生成数据。

此值在发送方和接收方端都会进行测量。如果散列值相同,则数据准确。

SSH 的工作原理

建立 SSH 连接需要两个重要组件。这些组件如下:

  • SSH 客户端组件
  • SSH 服务器端组件

1. SSH 客户端组件: SSH 客户端可以定义为我们安装在我们计算机上的应用程序,我们将使用它来连接到服务器或其他计算机。

客户端将使用给定的远程主机数据来发起连接。它还在凭证经过身份验证后建立加密连接。

2. SSH 服务器端组件:在服务器端,有一个称为 SSH 守护进程(SSH daemon)的元素。它不断监听特定的 TCP/IP 端口,以接收可能的客户端连接请求。

SSH 守护进程会响应协议版本和软件,然后两者会交换它们的身份信息。

如果给定的凭证准确,SSH 会为适当的环境建立一个新的会话。

SSH 客户端和 SSH 服务器通信的默认 SSH 协议版本是 2 版本。

如何建立 SSH 连接

由于建立 SSH 连接需要服务器和客户端组件,我们需要确保它们已分别安装在远程和本地计算机上。

OpenSSH 工具广泛用于各种 Linux 发行版。它是一个开源的 SSH 工具,相对容易安装。它需要访问我们计算机上的终端以及我们用于连接的服务器。

注意:默认情况下,Ubuntu 没有安装任何 SSH 服务器。

OpenSSH 客户端安装

在继续安装 SSH 客户端之前,请确保它尚未安装。许多 Linux 发行版已经包含 SSH 客户端。我们也可以为 Windows 计算机安装 PuTTY 或其他客户端来访问任何服务器。

要检查 Linux 系统上是否存在客户端,我们需要:

  1. 加载 SSH 终端。我们可以按 CTRL+ALT+T 或在键盘上查找 “terminal”
  2. 在终端中键入 ssh 并按 Enter
  3. 如果客户端存在,我们会收到响应。

这意味着我们已准备好远程连接到任何虚拟或物理机。否则,我们需要安装 OpenSSH 客户端。

  1. 执行以下命令在我们的计算机上安装 OpenSSH 客户端。
    sudo apt-get install openssh-client
  2. 如果需要,输入我们的超级用户密码。
  3. 按 Enter 键完成安装过程。

现在,我们可以访问任何带有服务器端应用程序的机器上的 SSH,前提是我们需要访问权限、IP 地址主机名

我们也可以通过输入以下命令来检查 ssh 是否已安装在我们的系统上:

SSH Command

OpenSSH 服务器安装

一台机器需要包含 SSH 软件工具包的服务器端组件才能接受 SSH 连接。

如果我们首先想检查 Ubuntu 远程计算机上是否已安装 OpenSSH 服务器,该计算机需要接受 SSH 连接,我们可以尝试连接到 localhost。

  1. 在服务器计算机上,打开我们的终端。我们可以找到 “terminal” 或在键盘上按 CTRL+ALT+T
  2. 键入 ssh localhost 并按 Enter。
  3. 对于没有安装 SSH 服务器的系统,响应将如下所示:

SSH Command

在这种情况下,我们将需要安装 OpenSSH 服务器。打开终端并

  1. 执行以下命令安装 SSH 服务器:
    sudo apt-get install openssh-server
  2. 如果需要,输入我们的超级用户密码。
  3. EnterY 允许安装过程继续,然后出现磁盘空间提示。
SSH Command

将安装必要的支持文件,然后我们可以使用以下命令检查 SSH 服务器是否在机器上运行:

SSH Command

当 SSH 服务正在运行时,终端中的响应应与此相同:

测试 OpenSSH 服务器是否正确安装的另一种方法是再次尝试在终端提示符下执行命令,即 ssh localhost。结果将如下所示:

输入 yyes 继续。

SSH Command

现在,我们已经设置好了服务器,可以通过 SSH 客户端从另一台计算机接受 SSH 连接请求。

重要提示

现在,我们可以编辑 SSH 守护进程的配置文件。例如,我们可以修改各种 SSH 连接的(默认)端口。我们可以在终端提示符下执行以下命令:


SSH Command

配置文件将在您选择的编辑器中打开。在这种情况下,我们可以使用 nano。

如果我们需要安装 Nano,我们可以运行以下命令:

注意:每次对 sshd_config 文件进行任何修改时,我们都需要重启 SSH 服务,即执行以下命令:


SSH Command

通过 SSH 连接

现在,我们已在所有需要的机器上安装了 OpenSSH 服务器和客户端。我们可以安全地与我们的服务器建立远程连接。为此:

1. 在我们的机器上启动 SSH 终端提示符并执行以下命令:

如果我们在本地计算机上的用户名与我们要连接的服务器上的用户名相同,我们只需键入:

然后按 'Enter' 键。

2. 输入我们的密码并按 Enter 键。

注意:输入密码时屏幕上不会有任何反馈。如果复制粘贴密码,请确保其安全存储,而不是放在任何文本文件中。

3. 如果是第一次连接到某个服务器,它会询问我们是否要继续连接。我们只需键入 yes 并按 Enter 键。

此信息仅在此次出现,因为我们的本地计算机尚未识别远程服务器。

4. 现在,已包含 ECDSA 密钥指纹,并且我们已连接到远程服务器。

SSH Command

当我们要远程连接的计算机位于同一网络上时,最好使用私有 IP 地址而不是公共 IP 地址。否则,我们将只需要使用公共 IP 地址。

此外,请确保我们知道 OpenSSH 能够理解连接请求的正确 TCP 端口,并且各种端口转发设置都正确。

当没有人修改 sshd_config 文件中的配置时,默认端口是 22。另外,我们也可以在主机 IP 地址后面附加端口号。

现在,我们可以通过终端控制和管理远程计算机。如果我们在连接到远程服务器时遇到任何问题,我们需要确保:

  • 远程计算机的 IP 地址是准确的。
  • SSH 守护进程正在监听的端口未被防火墙阻止或转发错误。
  • 我们的密码和用户名是准确的。
  • SSH 软件已正确安装。

注意:我们现在可以连接到我们的服务器。为了提高 SSH 的安全性,我们强烈建议采取一些额外的步骤。如果我们的设置保持默认值,则我们的系统可能会被黑客攻击,我们的服务器很容易成为脚本攻击的目标。