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

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

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

安装OpenSSH客户端

OpenSSH客户端程序称为ssh,可以从终端调用。 OpenSSH客户端软件包还提供了与ssh命令一起安装的其他SSH实用程序,例如 scp sftp

在Linux上安装OpenSSH客户端

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

在Ubuntu和Debian上安装OpenSSH

sudo apt update

在CentOS和Fedora上安装OpenSSH

sudo dnf install openssh-clients

在Windows 10上安装OpenSSH客户端

大多数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客户端

macOS附带默认安装的OpenSSH客户端。

如何使用ssh命令

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

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

ssh命令的基本语法如下:

ssh [OPTIONS] [USER@]:HOST

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

ssh ssh.myfreax.com

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

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

dev@ssh.myfreax.com's password:

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

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

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

ssh username@hostname

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

ssh -l username hostname

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

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

ssh -p 5522 username@hostname

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

ssh -v username@hostname

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

ssh命令接受许多选项。

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

SSH配置文件

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

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

一个示例SSH配置如下所示:

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

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

ssh -p 4422 mike@dev.myfreax.com

有关详细信息,请查看关于 SSH配置文件的文章。

公钥认证

SSH协议支持各种身份验证机制。基于公钥的身份验证机制使您无需登录密码即可登录到远程服务器

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

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

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

系统会要求您输入安全密码。是否要使用密码取决于您自己。拥有密钥对后,请将公共密钥复制到远程服务器:

ssh-copy-id username@hostname

输入远程用户密码,并将公钥添加到远程用户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 username@hostname

-f选项指示ssh命令在后台运行,而-N则不执行远程命令。

远程端口转发

远程端口转发与本地端口转发相反。它将端口从服务器主机转发到客户端主机,然后再转发到目标主机端口。-L选项告诉ssh创建远程端口转发:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname

动态端口转发

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

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

ssh -D [LOCAL_IP:]LOCAL_PORT  -N -f username@hostname

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

结论

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

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

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

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持