Linux 中 SSH 命令的基本用法和配置


安全外壳 (SSH) 是一种流行的协议,用于安全地通过互联网访问远程系统。它在本地计算机和远程计算机之间提供安全、加密的通信通道,使其成为远程管理、文件传输和隧道传输的绝佳工具。

在本文中,我们将介绍 SSH 在 Linux 中的基本用法和配置。

安装和启用 SSH

在深入使用 SSH 之前,让我们确保它已安装并在您的 Linux 机器上启用。

要在 Ubuntu、Debian 或其他基于 Debian 的发行版上安装 SSH,您可以运行以下命令:

sudo apt-get install openssh-server

在基于 Red Hat 的系统(如 CentOS、Fedora 或 Red Hat Enterprise Linux)上,您可以使用以下命令:

sudo yum install openssh-server

安装 SSH 后,您可以使用以下命令启动 SSH 守护程序来启用它:

sudo systemctl start sshd

要确保 SSH 在启动时自动启动,请运行以下命令:

sudo systemctl enable sshd

连接到远程主机

要使用 SSH 连接到远程主机,您需要知道其 IP 地址或主机名。获得此信息后,您可以使用 ssh 命令启动连接。

ssh 命令的基本语法如下:

ssh [username]@[hostname or IP address]

例如,要以用户 john 的身份连接到 IP 地址为 192.168.1.100 的远程主机,您可以使用以下命令:

ssh john@192.168.1.100

如果这是您第一次连接到远程主机,您可能会看到如下所示的消息:

无法建立主机“192.168.1.100 (192.168.1.100)”的真实性。

ECDSA 密钥指纹为 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。

您确定要继续连接吗 (yes/no)?

显示此消息是为了确认您信任远程主机。如果您确定要连接,请输入 yes。

然后系统会提示您输入您要连接到的用户的密码。输入正确的密码后,您将登录到远程主机。

Learn Linux/Unix in-depth with real-world projects through our Linux/Unix certification course. Enroll and become a certified expert to boost your career.

使用 SSH 传输文件

SSH 的另一个有用功能是在两台计算机之间安全地传输文件。要使用 SSH 传输文件,您可以使用 scp 命令。

scp 命令的基本语法如下:

scp [options] [source] [destination]

例如,要将名为 example.txt 的文件从本地计算机复制到 IP 地址为 192.168.1.100 的远程计算机并在 /home/john 目录中保存它,您可以使用以下命令:

scp example.txt john@192.168.1.100:/home/john

要将文件从远程计算机复制到本地计算机,您可以反转源和目标参数,如下所示:

scp john@192.168.1.100:/home/john/example.txt .

在此示例中,命令末尾的点 (.) 将当前工作目录指定为目标。

生成 SSH 密钥

SSH 密钥是登录远程主机的一种更安全的方式,因为它消除了对密码的需求。取而代之的是,使用由公钥和私钥组成的密钥对对用户进行身份验证。

要在本地计算机上生成 SSH 密钥对,您可以使用 ssh-keygen 命令。命令的基本语法如下:

ssh-keygen [options] [filename]

默认情况下,ssh-keygen 会创建一个具有 2048 位 RSA 密钥的密钥对。私钥保存在 ~/.ssh/id_rsa 文件中,公钥保存在 ~/.ssh/id_rsa.pub 文件中。

如果要使用不同的密钥类型或大小,可以分别指定 -t 和 -b 选项。例如,要生成 4096 位 Ed25519 密钥,您可以使用以下命令:

ssh-keygen -t ed25519 -b 4096

生成 SSH 密钥对后,您可以使用 ssh-copy-id 命令将公钥复制到远程主机。命令的基本语法如下:

ssh-copy-id [username]@[hostname or IP address]

例如,要将当前用户的公钥复制到 IP 地址为 192.168.1.100 的远程主机上的用户 john,您可以使用以下命令:

ssh-copy-id john@192.168.1.100

系统会提示您输入远程用户的密码。输入正确的密码后,公钥将添加到远程主机上的 authorized_keys 文件中。

从现在开始,您可以使用 SSH 密钥登录到远程主机,而无需输入密码。

配置 SSH

SSH 可以通过 ssh_config 文件进行配置,该文件位于 /etc/ssh/ 目录中。此文件包含适用于从机器发起的全部 SSH 连接的全局配置选项。

您还可以创建 ~/.ssh/ 目录中的配置文件来为单个主机指定配置选项。

配置文件使用以下语法:

Host [hostname or IP address]
   [option] [value]

例如,要指定 SSH 在连接到远程主机时应使用特定的身份文件,您需要将以下行添加到配置文件中:

Host myserver
   IdentityFile ~/.ssh/mykey

在此示例中,myserver 是远程主机的主机名或 IP 地址,而 ~/.ssh/mykey 是本地计算机上私钥文件的路径。

您还可以使用配置文件设置其他选项,例如端口号、用户名和压缩级别。

除了本文介绍的基本用法和配置外,SSH 还提供了一些其他功能和选项,您可能会发现它们很有用。

SSH 隧道

SSH 隧道,也称为 SSH 端口转发,允许您将流量从机器上的本地端口转发到远程机器上的端口。这对于访问本地网络无法直接访问的服务很有用。

创建 SSH 隧道的基本语法如下:

ssh -L [local port]:[remote host]:[remote port] [username]@[remote host]

例如,要将流量从本地机器上的端口 8080 转发到 IP 地址为 192.168.1.100 的远程服务器上的端口 80,您可以使用以下命令:

ssh -L 8080:localhost:80 john@192.168.1.100

建立隧道后,您可以通过在 Web 浏览器中导航到 http://localhost:8080 来访问远程服务。

用于多个主机的 SSH 配置

如果需要使用 SSH 连接到多个远程主机,您可能会发现为 ~/.ssh/config 文件中的每个主机创建单独的配置很有用。

要为特定主机创建配置,您可以将 Host 部分添加到配置文件中。例如,要为主机名 webserver 的主机创建配置,您可以将以下行添加到配置文件中:

Host webserver
   HostName 192.168.1.100
   User john
   IdentityFile ~/.ssh/mykey

在此示例中,HostName 指定远程主机的 IP 地址或主机名,User 指定远程用户名,而 IdentityFile 指定本地计算机上私钥文件的路径。

然后,您可以使用以下命令连接到远程主机:

ssh webserver
SSH Authentication Agents

SSH 身份验证代理允许您将 SSH 密钥存储在内存中,并使用它们对多个远程主机进行身份验证,而无需每次都输入密码短语。

要启用 SSH 身份验证代理,您可以使用以下命令:

eval $(ssh-agent)

这将启动 SSH 代理并打印代理进程 ID (PID)。然后,您可以使用 ssh-add 命令将您的私钥添加到代理中:

ssh-add ~/.ssh/mykey

将密钥添加到代理后,您可以连接到远程主机,而无需每次都输入密码短语。

结论

SSH 是一种强大的工具,可用于安全地访问远程系统并在计算机之间传输文件。通过了解 SSH 的基本用法和配置,您可以利用其功能使您的工作流程更高效、更安全。

请务必始终使用强密码并保护 SSH 密钥安全,并根据您的具体用例适当地配置 SSH。牢记这些最佳实践,SSH 可以成为远程管理和文件传输的宝贵工具。

更新于: 2023年4月10日

2K+ 阅读量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告