SSH命令

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

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

本文介绍了如何使用OpenSSH命令行客户端(ssh)以登录到远程计算机并运行命令或执行其他操作。

安装OpenSSH客户端#

OpenSSH客户端程序称为 ssh 并可以从终端调用。 OpenSSH客户端软件包还提供了其他SSH实用程序,例如 scpsftpssh 命令。

在Linux上安装OpenSSH Client#

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

在Ubuntu和Debian上安装OpenSSH#

sudo apt updatesudo 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.linuxize.com

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

The authenticity of host 'ssh.linuxize.com (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.linuxize.com' (ECDSA) to the list of known hosts.

[email protected]'s password:

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

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

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

ssh [email protected]

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

ssh -l username hostname

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

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

ssh -p 5522 [email protected]

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

ssh -v [email protected]

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

ssh 该命令接受许多选项。

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

SSH配置文件号

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

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

SSH配置示例如下所示:

Host dev
    HostName dev.linuxize.com
    User mike
    Port 4422

当您通过键入来调用ssh客户端时 ssh dev,该命令将读取 ~/.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 -D [LOCAL_IP:]LOCAL_PORT  -N -f [email protected]

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

结论#

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

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

如有任何疑问,请在下面发表评论。

SSH终端

Sidebar