概述
本文介绍作为 Linux 服务器管理与远程运维核心工具的 SSH (Secure Shell) 的基本概念及核心用法。内容涵盖从客户端软件包安装、基础远程连接,到安全的 SSH 密钥对生成、免密认证配置,以及在实际生产环境中非常实用的 SSH config 配置文件和端口转发技巧,通过循序渐进的终端实战命令带您轻松上手。
1. 确认 SSH 客户端及基础远程连接
为了进行 SSH 远程连接实战,首先安装 openssh-client 软件包并更新至最新状态。

ssh -V 命令用于查看系统中安装的 OpenSSH 客户端版本信息。
⚙️ [主要选项]
-p : 指定远程服务器使用的特定端口号,而非默认的 22 端口。-i : 指定用于身份验证的私钥 (Private Key) 文件路径,代替密码输入。-v : 输出调试信息,用于详细排查连接过程与出现的问题。-C : 启用数据传输压缩,以节省网络带宽。-o : 在命令行中直接指定配置文件 (~/.ssh/config) 中的选项(例如:ConnectTimeout)。-L : 配置本地端口转发,将流量转发至远程网络服务。-R : 配置远程端口转发,允许远程服务器访问本地服务。

ssh -p 22 -o ConnectTimeout=5 [email protected] 命令通过指定 22 端口并设置 5 秒连接超时时间,尝试连接到指定的远程主机。
这样可以在连接延迟时避免无休止的等待,并快速确认连接状态。

2. 生成 SSH 密钥对 (Key Pair) 及安全权限配置
准备好用于安全存放 SSH 密钥文件的目录,并通过 mkdir -p ~/.ssh && chmod 700 ~/.ssh 命令限制权限,仅允许所有者访问。

ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' 命令使用现代加密标准 Ed25519 算法生成一套无需输入密码即可使用的全新 SSH 密钥对。
从命令执行结果中可以看到,私钥 (id_ed25519)、公钥 (id_ed25519.pub) 以及唯一的密钥指纹均已成功生成。

为了满足 SSH 守护进程严格的安全要求,执行 chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub 命令设置文件权限,使私钥仅所有者可读写,公钥对所有人可读。

ls -la ~/.ssh 命令用于详细检查该目录下生成的文件列表及应用的安全权限状态。
从输出结果可以验证,.ssh 目录权限为 drwx------ (700),私钥权限为 -rw------- (600),公钥权限为 -rw-r--r-- (644),所需权限均已正确生效。

3. 注册公钥以实现免密登录 (ssh-copy-id)
创建用于保存远程连接公钥的文件,并通过 touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys 命令设置访问权限,使其仅所有者可读写。

执行 cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys 命令,将生成的公钥内容追加到允许认证的密钥列表中。

ssh-keygen -l -f ~/.ssh/authorized_keys 命令用于查询已注册认证密钥文件的指纹信息,以验证公钥是否正确添加。
从输出结果中可以确认,256 位的 Ed25519 公钥及生成时指定的注释信息 (lab-demo@ubuntu) 已正确注册。

4. 使用 SSH Config 配置文件简化繁琐的连接命令
为了能够使用别名轻松连接而不是每次输入冗长的连接参数,可以在 ~/.ssh/config 文件中定义远程主机的 IP 地址、用户名、端口号以及认证私钥路径。

为避免 SSH 客户端因安全原因拒绝权限不安全的配置文件,执行 chmod 600 ~/.ssh/config 命令设置文件权限,仅允许所有者读写。

cat ~/.ssh/config 命令用于输出编辑好的 SSH 客户端配置文件内容以确认配置状态。
通过输出结果可以确认,针对 dev-server 别名的主机名、用户账号、端口及认证私钥信息均已按预期正确保存。

5. 提升远程运维效率的 SSH 单次命令执行与隧道转发
ssh -V 命令用于确认当前系统中安装的 OpenSSH 客户端版本信息。

ssh -o BatchMode=yes -o ConnectTimeout=2 [email protected] 'uname -a; df -h' || true 命令无需进入交互式远程 Shell,即可直接在远程主机上执行查看系统信息及磁盘使用情况的命令并获取返回结果。
通过设置为无需等待密码输入直接执行,可以在自动化脚本或批处理任务中安全高效地运行单次命令。

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 [email protected] || true 命令在后台建立一条无需执行远程命令的安全加密隧道,执行本地端口转发,将本地系统的 8080 端口映射到远程服务器的 80 端口。
通过此方式,可以经由本地端口安全访问外部无法直接访问的远程内网 Web 服务或数据库。

至此,我们一步步学习了 Ubuntu 环境下的 SSH 基础远程连接、保障安全性的密钥免密登录以及实用的端口转发技巧。
希望您能通过亲自实操掌握这些 SSH 技能,并在今后搭建起更加安全、便捷的远程服务器管理环境。