SSH 简介

更新于 2026-01-27

Somnath Musib 2024-03-18

1. 引言

Secure Shell(SSH)是一种流行的网络协议,允许我们在不安全的网络(例如互联网)上访问远程计算机。

在本教程中,我们将深入探讨 SSH,并探索其各个方面。

2. 什么是 Secure Shell?

Secure Shell(也称为 Secure Socket Shell)是一种网络协议。它是一种应用层协议,位于开放系统互连(OSI)网络模型的第 7 层。该术语也指实现 SSH 协议的一整套实用工具。

Secure Shell 同时支持基于密码和基于密钥的身份验证。基于密码的身份验证允许用户通过提供用户名和密码来向远程服务器进行身份验证。而基于密钥的身份验证则允许用户通过密钥对进行身份验证。这些密钥对是两个用于客户端向 Secure Shell 服务器进行身份验证的加密安全密钥。

此外,Secure Shell 协议还会对两台计算机之间的数据通信进行加密。它被广泛用于通过互联网与远程计算机通信。

3. Secure Shell 架构

ssh-arc

Secure Shell 采用客户端-服务器架构。通常,服务器管理员会安装一个服务器程序,用于接受或拒绝传入的连接请求。同时,用户在其本地系统上运行一个客户端程序,向服务器发起连接请求。默认情况下,服务器监听 HTTP 端口 22。

4. 我们应在何处使用 Secure Shell?

在大多数情况下,所有操作系统服务器都默认自带 Secure Shell 应用程序。SSH 连接可用于多种用途。例如,以下是一些常见应用场景:

  • 本地与远程机器之间的通信
  • 远程访问服务器资源
  • 在远程主机上执行命令
  • 执行各种系统管理任务

此外,基于密钥的身份验证还提供了便捷的单点登录(Single Sign-On, SSO)功能,使用户可以在不同远程主机账户之间无缝切换,而无需重复输入密码。

5. Secure Shell 命令

Secure Shell 提供了多个可执行命令,具备附加功能:

  • ssh – 用于登录远程机器,以及在远程机器上执行命令
  • sshd – 是一个 SSH 服务器守护进程,等待来自 SSH 客户端的传入连接请求,并允许已授权的系统连接到本地主机
  • ssh-keygen – 用于生成新的 SSH 身份验证密钥对,可用于自动化登录、实现单点登录(SSO)以及对主机进行身份验证
  • ssh-copy-id – 允许将 SSH 密钥复制、安装并配置到服务器上
  • scp – 是 RCP 协议的一个 SSH 加密版本,用于在机器之间复制文件
  • sftp – 是 FTP 协议的一个 SSH 加密版本,用于在互联网上共享文件

6. 如何使用 Secure Shell?

使用 Secure Shell 最常见的方法是使用 ssh 命令登录远程计算机:

ssh admin@server.example.com

在上述命令中,我们使用 ssh 可执行文件以 admin 用户身份连接到 server.example.com 服务器。该命令的格式为 user@servername,其中 user 是服务器上的用户名,servername 是服务器的名称。此外,我们也可以使用 IP 地址代替 DNS 名称或服务器名称。例如,命令 root@10.1.1.2 表示以 root 用户身份登录到 IP 地址为 10.1.1.2 的服务器。

6.1 创建密钥对

我们还可以使用 SSH 在本地机器上生成私钥和公钥对:

ssh-keygen -t rsa

这里我们使用了 ssh-keygen 命令来创建私钥-公钥对。公钥会被分享给远程计算机,而私钥则需保密以确保安全性。

6.2 复制文件

我们还可以使用 Secure Shell 协议通过 scp 命令在机器之间复制文件:

scp fileName user@remotehost:destinationPath

在上述命令中,fileName 是当前主机目录中要复制的文件。命令的其余部分表示远程计算机的用户和服务器信息,以及目标路径。

7. Secure Shell 隧道

Secure Shell 隧道是一种技术,允许用户在本地主机和远程主机之间建立一条安全隧道。

其主要目的是将网络流量重定向到特定的端口或 IP 地址。这使得远程主机可以直接被本地机器上的应用程序访问。目标地址可能位于远程 SSH 服务器上,或者该服务器可被配置为将流量进一步转发到另一台远程主机。

8. 结论

在本教程中,我们概述了 Secure Shell 协议。首先,我们讨论了它的定义及其架构;接着,我们介绍了如何使用 SSH 以及其最适合的应用场景。

最后,我们介绍了常用命令,并探讨了一项非常有用的功能——Secure Shell 隧道。