掌握 SSH:您的必备命令行指南

通过这份必备的命令行指南,全面解锁安全外壳 (SSH) 的强大功能。学习用于安全远程登录的基础命令,包括自定义端口和单命令执行。掌握基于密钥的身份验证以增强安全性,并使用 `scp` 和 `sftp` 等安全文件传输工具来简化数据迁移。最后,探索本地端口转发和配置 `~/.ssh/config` 文件等高级技术,以大幅提高您的管理工作流程和效率。

37 浏览量

精通 SSH:您的必备命令行指南

安全外壳(SSH)协议是 Linux、macOS 和类 Unix 环境中安全远程管理的核心。它提供了一个加密通道用于网络服务,允许用户安全地登录远程系统、执行命令和传输文件,而无需暴露敏感数据。

虽然 SSH 无处不在,但掌握其核心命令和配置选项可以极大地提高远程服务器管理工作流的效率、安全性和可靠性。本指南是一个全面的资源,涵盖了安全登录、高效文件处理以及端口转发等强大网络技术所需的基本命令。


1. 建立安全远程登录

SSH 最常见的用途是保护到远程服务器的终端连接。基本语法很简单,但有关键选项可用于增强安全性和可用性。

基本连接语法

标准命令需要指定远程用户和主机地址(IP 或域名):

ssh [用户]@[主机]
# 示例:
ssh [email protected]

指定非标准端口

出于安全原因,许多管理员会更改默认的 SSH 端口(端口 22)。使用 -p 标志指定不同的端口号:

ssh -p 2222 [email protected]

执行单个远程命令

SSH 不仅限于打开交互式 shell。您可以远程执行单个命令,并将输出返回本地,这对于脚本编写和快速检查非常有用。

# 在远程服务器的 /var/log 目录下运行 'ls -l'
ssh user@host 'ls -l /var/log'

# 检查服务器的正常运行时间
ssh user@host uptime

2. 使用 SSH 密钥管理身份验证

密码身份验证容易受到暴力破解攻击。SSH 密钥——由私钥(保存在您的机器上)和公钥(放置在远程服务器上)组成的加密对——提供了一种更安全得多的身份验证方法。

生成密钥对

如果您还没有密钥对,可以使用 ssh-keygen 生成一个。最佳实践是使用强密码短语来保护您的私钥。

ssh-keygen -t rsa -b 4096

将公钥复制到服务器

ssh-copy-id 实用程序是将本地公钥(~/.ssh/id_rsa.pub)安装到远程用户 ~/.ssh/authorized_keys 文件中的最简单方法,从而实现无密码登录。

# 将默认公钥复制到服务器并设置正确的权限
ssh-copy-id user@host

提示:使用私钥
如果您的私钥不在默认位置(~/.ssh/id_rsa),则在连接时必须使用 -i 标志指定其路径:
bash ssh -i ~/.ssh/my_custom_key user@host

3. 安全文件传输

SSH 提供了两种主要的安全文件传输工具:scp(安全复制)和 sftp(安全文件传输协议)。

A. 使用安全复制 (scp)

scp 非常适合简单、快速、一次性的文件传输,它提供了一个模仿标准 Unix cp(复制)命令的命令行界面。

将本地文件传输到远程

# 语法:scp [本地文件] [用户]@[主机]:/[远程路径]
scp deployment.tar.gz user@webserver:/var/www/uploads/

将远程文件传输到本地

# 语法:scp [用户]@[主机]:/[远程文件] [本地路径]
scp user@dbserver:/var/log/backup.sql .

递归复制目录

使用 -r 标志复制整个目录结构。

scp -r ~/project_files/ user@buildserver:/home/user/builds/

B. 使用安全文件传输协议 (sftp)

sftp 建立一个交互式会话,类似于传统的 FTP 客户端,但通过 SSH 加密。它更适合在单个会话中导航远程目录、列出文件和执行多个传输。

启动 sftp 会话

sftp user@host

常见的 sftp 会话命令

命令 描述
ls 列出远程文件
lls 列出本地文件
get filename 从远程服务器下载文件
put filename 上传文件到远程服务器
cd /path/ 更改远程目录
lcd /path/ 更改本地目录
quit 退出 sftp 会话

4. 高级技术:SSH 隧道(端口转发)

SSH 隧道,或称端口转发,允许您加密非安全协议的连接,或通过跳板主机访问内部网络上的服务。最常见的形式是本地端口转发。

本地端口转发 (-L)

本地转发将您本地机器上的端口流量通过 SSH 服务器转发到远程主机上的指定端口。这对于访问不直接暴露给公共互联网的内部数据库、Web 界面或专有服务非常有用。

场景: 您想访问私有内部 Web 服务器(只能从 jumpbox 访问)的 80 端口。

# 语法:ssh -L [本地端口]:[目标主机]:[目标端口] [用户]@[跳板主机]
ssh -L 8080:internal-web.lan:80 user@jumpbox -N
  • -L 8080:internal-web.lan:80:您本地机器上到达 8080 端口的流量将通过 jumpbox 转发到 internal-web.lan 的 80 端口。
  • -N:告诉 SSH 不要执行远程命令;它仅用于建立隧道。

连接建立后,您可以通过在本地浏览器中导航到 http://localhost:8080 来访问内部站点。

5. 使用 SSH 配置文件提高效率

手动输入复杂的 SSH 命令(包括自定义端口、用户名和密钥路径)效率低下。SSH 配置文件(~/.ssh/config)允许您为经常访问的服务器定义别名和设置。

示例配置(~/.ssh/config

创建或编辑文件 ~/.ssh/config,结构如下:

# 服务器 1:标准密钥,非标准端口
Host dev-web
    HostName 10.0.0.50
    User deployment_user
    Port 2222
    IdentityFile ~/.ssh/id_rsa_dev

# 服务器 2:需要密钥身份验证的跳板访问
Host production-db
    HostName 203.0.113.10
    User sysadmin
    IdentityFile ~/.ssh/prod_key
    LocalForward 54320 127.0.0.1:5432

使用别名连接

配置完成后,连接变得更加简单:

# 以 deployment_user 用户连接到 10.0.0.50 端口 2222
ssh dev-web

# 连接并自动设置端口转发(如果已配置)
ssh production-db

结论

SSH 是一个强大、灵活的工具,对于现代系统管理至关重要。通过超越基本的 ssh user@host 命令,采用基于密钥的身份验证,利用 scpsftp 等安全文件传输工具,以及掌握配置文件,您可以解锁一个高效且安全的远程访问环境。持续练习这些基本命令可确保您能够有效地、安全地管理和与远程基础设施进行交互。