目录
- 什么是 SSH?
- 为什么 SSH 如此重要?
- 如何使用 SSH?
- 1 基础用法:首次连接
- 2 常用连接参数
- 3 安全地执行命令
- 4 安全地传输文件
- 5 图形化 SSH 客户端工具推荐
- SSH 进阶与安全配置
- 1 使用 SSH 密钥对进行无密码登录
- 2 SSH 配置文件 (
~/.ssh/config) - 3 端口转发(隧道)
什么是 SSH?
SSH (Secure Shell),中文为“安全外壳协议”,是一种加密的网络协议,主要用于安全地在客户端和服务器之间进行通信。

它就像一个加密的、功能强大的远程控制台,当你通过 SSH 连接到一台 Linux 服务器时,你就在那台服务器上获得了一个命令行终端,你可以像坐在电脑前一样输入命令、管理文件、运行程序,而所有传输的数据(包括你的密码)都是经过加密的,无法被轻易窃听。
为什么 SSH 如此重要?
在 SSH 出现之前,人们使用 Telnet、FTP 等协议来远程管理服务器,这些协议有一个致命的缺点:所有数据都是明文传输的,这意味着你的用户名、密码、你执行的命令都会在网络上“裸奔”,非常不安全。
SSH 的出现解决了这个问题,它带来了革命性的优势:
- 加密传输:所有数据都经过加密,防止信息泄露。
- 身份验证:提供两种主要的验证方式:密码和密钥对,密钥对验证比密码更安全。
- 数据完整性:确保传输的数据在传输过程中没有被篡改。
- 多功能性:不仅可以远程登录,还可以安全地传输文件(
scp,sftp)和创建安全的网络隧道。
SSH 是现代 Linux/Unix 系统管理员和开发者的必备工具。

如何使用 SSH?
1 基础用法:首次连接
你的电脑上需要有 SSH 客户端,几乎所有现代操作系统(Linux, macOS, Windows 10/11)都默认内置了 ssh 命令。
假设你的服务器 IP 地址是 168.1.100,用户名是 root。
在终端中输入以下命令:
ssh root@192.168.1.100
ssh:是客户端程序。root@:表示你要以root这个用户的身份登录。168.1.100:是服务器的 IP 地址或域名。
首次连接的提示: 第一次连接时,系统会提示你无法确认服务器的真实性(因为你还没有它的“指纹”),这是正常的安全机制,系统会显示服务器的公钥指纹,并询问你是否继续。

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 并回车,系统会将该服务器的信息记录在你的 ~/.ssh/known_hosts 文件中,下次连接就不会再提示了。
输入密码: 之后,系统会提示你输入密码。你输入的密码是不会显示在屏幕上的(光标不会移动),这是正常的安全特性。 输入完毕后直接按回车。
如果密码正确,你将成功登录到服务器的命令行界面,看到类似 root@server:~# 的提示符。
2 常用连接参数
ssh 命令非常灵活,可以通过参数来改变其行为。
-
指定端口:如果服务器的 SSH 服务不是默认的 22 端口,使用
-p参数。ssh -p 2222 user@192.168.1.100
-
指定私钥文件:如果你使用 SSH 密钥登录,可以用
-i参数指定私钥文件路径。ssh -i ~/.ssh/my_custom_key user@192.168.1.100
-
指定连接用户:也可以不写在 前面,而用
-l参数。ssh -l admin 192.168.1.100
-
启用详细输出:
-v参数可以显示详细的连接过程,对于排查连接问题非常有用。ssh -v user@192.168.1.100
3 安全地执行命令
你不仅可以登录后交互式地操作,还可以直接在本地命令行上让远程服务器执行一个命令,并返回结果。
语法:ssh user@host "command"
示例:
- 在远程服务器上查看磁盘使用情况:
ssh root@192.168.1.100 "df -h"
- 在远程服务器上查看某个文件的最后 10 行:
ssh root@192.168.1.100 "tail -n 10 /var/log/nginx/error.log"
4 安全地传输文件
SSH 协议包含了两个强大的文件传输工具:
-
scp(Secure Copy):用于在本地和远程之间复制文件。-
从本地复制到远程:
# 复制单个文件 scp local_file.txt root@192.168.1.100:/remote/path/ # 复制整个目录(需要加 -r 参数) scp -r local_folder/ root@192.168.1.100:/remote/path/
-
从远程复制到本地:
# 复制单个文件 scp root@192.168.1.100:/remote/path/remote_file.txt ./ # 复制整个目录 scp -r root@192.168.1.100:/remote/path/remote_folder/ ./
-
-
sftp(SSH File Transfer Protocol):提供了一个交互式的、类似 FTP 的安全文件传输会话。sftp root@192.168.1.100
连接成功后,你会进入
sftp>提示符,可以使用如下命令:ls:列出远程文件cd:切换远程目录lcd:切换本地目录get file.txt:从远程下载文件put local_file.txt:上传文件到远程bye:退出 sftp
5 图形化 SSH 客户端工具推荐
如果你不习惯使用命令行,也有很多优秀的图形化工具(SSH 客户端)。
-
Windows 平台:
- PuTTY: 经典老牌,轻量级,功能单一但专注。
- MobaXterm: 非常强大,集成了 SSH、X11 服务器、文件传输、多种网络工具等,是 Windows 用户的神器。
- Xshell: 功能强大,界面友好,支持标签页,有免费版。
- Windows Terminal / Windows 11 Terminal: 现代化的终端应用,可以很好地集成
ssh命令。
-
macOS 平台:
- 内置 Terminal: 直接使用
ssh命令。 - Blink Shell: 高度可定制的终端,支持多路复连,体验极佳。
- Termius: 界面美观,支持 SSH、SFTP、Mosh 等。
- 内置 Terminal: 直接使用
-
Linux 平台:
- 内置 Terminal: 直接使用
ssh命令。 - GNOME Terminal / Konsole: 强大的桌面终端。
- Remmina: 功能全面的远程桌面客户端,也支持 SSH。
- 内置 Terminal: 直接使用
SSH 进阶与安全配置
1 使用 SSH 密钥对进行无密码登录
使用密码登录虽然方便,但容易受到暴力破解攻击,更安全的方式是使用SSH 密钥对。
它的工作原理是:你生成一对密钥(一个公钥和一个私钥),将公钥放到服务器上,私钥保存在你的本地电脑上,登录时,服务器会用你的公钥来加密一个“质询”,你的本地电脑必须用对应的私钥才能解开,从而证明你的身份。
操作步骤:
-
在本地电脑上生成密钥对(如果还没有的话):
# 一路按回车即可,使用默认的文件名和路径 ssh-keygen -t ed25519 -C "your_email@example.com"
这会在
~/.ssh/目录下生成id_ed25519(私钥)和id_ed25519.pub(公钥)两个文件。 -
将公钥复制到服务器上: 有两种方法:
-
使用
ssh-copy-id命令(最简单)# 这条命令会自动将你的公钥追加到服务器上用户的 ~/.ssh/authorized_keys 文件中 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100
它会提示你输入一次该用户的密码,完成后,下次登录就可以直接使用密钥,无需输入密码了。
-
手动复制
# 1. 在本地查看公钥内容 cat ~/.ssh/id_ed25519.pub # 2. 复制输出的全部内容 # 3. 登录到服务器 ssh user@192.168.1.100 # 4. 在服务器上,确保 .ssh 目录存在且权限正确 mkdir -p ~/.ssh chmod 700 ~/.ssh # 5. 将刚才复制的公钥内容追加到 authorized_keys 文件中 echo "粘贴你复制的公钥内容到这里" >> ~/.ssh/authorized_keys # 6. 设置 authorized_keys 文件的权限 chmod 600 ~/.ssh/authorized_keys
-
2 SSH 配置文件 (~/.ssh/config)
每次都输入 ssh user@host -p port 很麻烦,你可以使用 ~/.ssh/config 文件来为每个服务器创建一个“别名”。
打开或创建 ~/.ssh/config 文件(在 Windows 上是 C:\Users\YourUsername\.ssh\config),然后添加如下内容:
# 服务器别名
Host my-server
HostName 192.168.1.100
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
# 可选:禁用密码登录,强制使用密钥
# PasswordAuthentication no
# 另一个服务器
Host web-server
HostName example.com
User deploy
Port 2222
IdentityFile ~/.ssh/deploy_key
你只需要输入 ssh my-server 就能连接到第一台服务器,输入 ssh web-server 就能连接到第二台,非常方便!
3 端口转发(隧道)
SSH 的一个强大功能是“端口转发”,也叫“隧道”,它可以通过 SSH 连接,将一个端口的流量安全地“隧道”到另一个地方。
-
本地转发:将你本地电脑的一个端口,映射到远程服务器的一个端口,常用于访问远程服务器上只允许本机访问的服务(如数据库)。
# 将本地的 3307 端口流量,通过 my-server 转发到其本地的 3306 (MySQL) 端口 ssh -L 3307:localhost:3306 my-server
之后,你可以在本地用
localhost:3307来访问远程服务器上的 MySQL 数据库。 -
远程转发:将远程服务器的一个端口,映射到你的本地电脑,较少用,但场景特定。
SSH 是连接和管理 Linux 服务器的基石,它安全、高效且功能强大。
- 对于初学者:掌握
ssh user@host、scp和sftp的基本用法,就能完成大部分日常操作。 - 对于进阶用户:强烈建议配置 SSH 密钥对和
~/.ssh/config文件,这会极大地提升你的工作效率和安全性。 - 对于系统管理员:深入理解端口转发和 SSH 服务器端的精细配置(如修改端口、禁用 root 登录等)是保障服务器安全的关键。
希望这份详细的指南能帮助你熟练掌握 SSH 工具!
