Linux ssh 命令

2025-02-13 17:13:11 1334

SSH(Secure Shell)是一种加密网络协议,用于在客户端和服务器之间建立加密连接。SSH客户端创建与远程SSH服务器之间的安全连接。加密连接可以用来在服务器上执行命令、X11隧道、端口转发等。


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


本文解释了如何使用OpenSSH命令行客户端(ssh)登录远程机器并运行命令或执行其他操作。

安装 OpenSSH 客户端

OpenSSH 客户端程序称为 ssh,可以从终端调用。OpenSSH 客户端包还提供了其他 SSH 实用程序,如 scpsftp,这些程序与 ssh 命令一起安装。


在 Linux 上安装 OpenSSH 客户端

大多数 Linux 发行版默认预装了 OpenSSH 客户端。如果您的系统没有安装 ssh 客户端,可以使用您的发行版包管理器进行安装。

在 Ubuntu 和 Debian 上安装 OpenSSH

sudo apt update
sudo apt install openssh-client

在 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.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.
dev@ssh.linuxize.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.linuxize.com
   User mike
   Port 4422

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

ssh -p 4422 mike@dev.linuxize.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 服务器主机,然后到目标主机端口。

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

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f username@hostname

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

远程端口转发

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

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

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

动态端口转发

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

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

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

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

结论

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

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


SSH 作为网络安全连接的关键技术,在远程管理、数据传输等场景发挥着不可替代的作用。掌握 OpenSSH 客户端安装及 ssh 命令各类操作,无论是运维人员管理服务器,还是开发者远程协作,都能更加高效、安全地完成任务,为构建稳定、安全的网络环境奠定坚实基础 。

想了解更多相关技术小分享可以上蓝队云官网查阅,更多技术问题,也可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。



提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: