SSH 命令

在本文中,我们将说明如何使用 OpenSSH 命令行客户端 (ssh) 登录到远程计算机并运行命令或执行其他操作。

安全外壳 (SSH) 是一种加密网络协议,用于客户端和服务器之间的加密连接。 ssh 客户端会创建到远程计算机上 SSH 服务器的安全连接。加密的连接可用于在服务器上执行命令, X11 隧道,端口转发等。

有许多免费和商用的 SSH 客户端,其中 OpenSSH 是使用最广泛的客户端。它在所有主要平台上都可用,包括 Linux , OpenBSD , Windows , macOS 等。

安装 OpenSSH 客户端

OpenSSH 客户端程序是 ssh,并且可以从终端调用它。 OpenSSH 客户端软件包还提供了其他 SSH 实用程序,例如 scpsftpssh 命令一起安装的。

在 Linux 上安装 OpenSSH Client

默认情况下, OpenSSH 客户端已预安装在大多数 Linux 发行版中。如果您的系统未安装 ssh 客户端,则可以使用发行版的软件包管理器进行安装。

在 Ubuntu 和 Debian 上安装 OpenSSH

sudo apt update
sudo apt install openssh-client

在 CentOS 和 Fedora 上安装 OpenSSH

sudo dnf install openssh-clients

在 Windows 10 上安装 OpenSSH Client

大多数 Windows 用户正在使用 Putty 通过 SSH 连接到远程计算机。但是, Windows 10 的最新版本包括 OpenSSH 客户端和服务器。这两个软件包都可以通过 GUI 或 PowerShell 安装。

要查找 OpenSSH 软件包的确切名称,请键入以下命令:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

该命令应返回如下内容:

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

知道软件包名称后,请运行以下命令进行安装:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

成功后,输出将如下所示:

Path          :
Online        : True
RestartNeeded : False

在 macOS 上安装 OpenSSH Client

macOS 默认随附安装了 OpenSSH 客户端。

如何使用 ssh 命令

为了能够通过 SSH 登录到远程计算机,必须满足以下要求:

  • SSH服务器必须在远程计算机上运行。
  • 必须在远程计算机防火墙中打开 SSH 端口。
  • 您必须知道远程帐户的用户名和密码。该帐户需要具有适当的特权才能进行远程登录。

ssh 命令的基本语法如下:

ssh [OPTIONS] [[email protected]]:HOST

要使用此 ssh 命令,请打开终端或 PowerShell ,然后键入 ssh 远程主机名:

ssh ssh.buzheng.org

首次通过 SSH 连接到远程计算机时,您将看到类似以下的消息。

The authenticity of host 'ssh.buzheng.org (192.168.121.111)' can't be established.
ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
Are you sure you want to continue connecting (yes/no)?

每个主机都有一个唯一的指纹,该指纹存储在 ~/.ssh/known_hosts 文件中。

输入 yes 以存储远程指纹,然后将提示您输入密码。

Warning: Permanently added 'ssh.buzheng.org' (ECDSA) to the list of known hosts.

[email protected]'s password:

输入密码后,您将登录到远程计算机。

如果未提供用户名,该 ssh 命令将使用当前系统登录名。

要以其他用户身份登录,请以以下格式指定用户名和主机:

用户名也可以使用以下 -l 选项指定:

ssh -l username hostname

默认情况下,如果未提供任何端口, SSH 客户端将尝试连接到端口 22 上的远程服务器。在某些服务器上,管理员正在更改默认 SSH 端口,以通过降低以下风险来为服务器添加额外的安全性:自动攻击。

要在非默认端口上进行连接,请使用以下 -p 选项指定端口:

ssh -p 5522 [email protected]

如果遇到身份验证或连接问题,请使用 -v 选项告诉 ssh 打印调试消息:

要提高详细程度,请使用 -vv-vvv

ssh 命令接受许多选项。

有关所有选项的完整列表,请在终端中 ssh 输入 man ssh 以阅读手册页。

SSH 配置文件

如果您每天定期通过 SSH 连接到多个远程系统,您会发现记住所有的远程 IP 地址,不同的用户名,非标准端口和各种命令行选项非常困难。

OpenSSH 客户端读取每个用户配置文件 (~/.ssh/config) 中设置的选项。在此文件中,您可以为连接到的每台远程计算机存储不同的 SSH 选项。

SSH 配置示例如下所示:

Host dev
    HostName dev.buzheng.org
    User mike
    Port 4422

通过键入 ssh dev 命令调用 ssh 客户端时,命令将读取 ~/.ssh/config 文件并使用为开发主机指定的连接详细信息。在此示例中, ssh dev 等效于以下内容:

ssh -p 4422 [email protected]

有关更多信息,请查看有关 SSH 配置文件的文章。

公钥认证

SSH 协议支持各种身份验证机制。

基于公用密钥的身份验证机制使您无需键入密码即可登录到远程服务器。

该方法通过生成一对用于身份验证的加密密钥来工作。私钥存储在客户端设备上,并将公钥传输到您要登录的每个远程服务器。必须将远程服务器配置为接受密钥身份验证。

如果本地计算机上还没有 SSH 密钥对,则可以通过键入以下内容生成一个:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

系统将要求您输入安全密码。是否要使用密码取决于您自己。

拥有密钥对后,将公共密钥复制到远程服务器:

ssh-copy-id [email protected]

输入远程用户密码,并将公钥添加到远程用户 authorized_keys 文件中。

密钥上传后,您可以登录到远程服务器而无需提示输入密码。

通过设置基于密钥的身份验证,可以简化登录过程并提高整体服务器安全性。

转发端口

SSH 隧道或 SSH 端口转发是一种在客户端和服务器计算机之间创建加密的 SSH 连接的方法,通过该连接可以中继服务端口。

SSH 转发对于传输使用未加密协议的服务(例如 VNC 或 FTP) ,访问受地理限制的内容或绕过中间防火墙的网络数据很有用。基本上,您可以转发任何 TCP 端口并通过安全的 SSH 连接建立隧道流量。

SSH 端口转发有三种类型:

本地端口转发

本地端口端口转发使您可以将连接从客户端主机转发到 SSH 服务器主机,然后再转发到目标主机端口。

要创建本地端口转发,请将 -L 选项传递给 ssh 客户端:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f [email protected]

-f 选项告诉 ssh 命令在后台运行 -N 而不执行远程命令。

远程端口转发

远程端口转发与本地端口转发相反。它将端口从服务器主机转发到客户端主机,然后再转发到目标主机端口。

-L 选项告诉 ssh 您创建远程端口转发:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f [email protected]

动态端口转发

动态端口转发创建了一个 SOCKS 代理服务器,该服务器允许跨多个端口进行通信。

要创建动态端口转发 (SOCKS) ,请将该 -D 选项传递给 ssh 客户端:

ssh -R [LOCAL_IP:]LOCAL_PORT  -N -f [email protected]

有关更多详细信息和分步说明,请参阅有关如何设置 SSH 隧道(端口转发)的文章

结论

要通过 SSH 连接到远程服务器,请使用 ssh 命令,后跟远程用户名和主机名 (ssh [email protected]) 。

知道如何使用该 ssh 命令对于管理远程服务器至关重要。