Linux 中的基本 SSH 命令用法和配置
Secure Shell (SSH) 是一种流行的协议,用于通过互联网安全地访问远程系统。它在本地和远程计算机之间提供安全、加密的通信通道,使其成为远程管理、文件传输和隧道的绝佳工具。
在本文中,我们将介绍 Linux 中 SSH 的基本用法和配置。
安装并启用 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:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。
您确定要继续连接吗(是/否)?
显示此消息是为了确认您信任远程主机。如果您确定要连接,请键入 yes。
然后,系统将提示您输入连接用户的密码。输入正确的密码后,您将登录到远程主机。
使用 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]
例如,要将当前用户的公钥以用户 john 的身份复制到 IP 地址为 192.168.1.100 的远程主机,您可以使用以下命令 -
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 文件中为每个主机创建单独的配置很有用。
要为特定主机创建配置,您可以将主机部分添加到配置文件中。例如,要为主机名为 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 可以成为远程管理和文件传输的宝贵工具。