本文将详细介绍如何在 Windows 系统的 命令提示符 (cmd) 环境下连接到远程的 Linux 服务器或系统。这是系统管理员、开发人员和 IT 专业人员必备的技能,用于远程管理和执行任务。

核心原理:SSH 协议
连接的基础是 Secure Shell (SSH) 协议。SSH 提供了一种加密的通信通道,确保客户端(您的 Windows cmd)和服务器(目标 Linux 机器)之间的数据传输安全可靠。
前置条件
在开始连接之前,请确保满足以下条件:
1. 目标 Linux 主机信息:您需要知道目标 Linux 机器的IP 地址或主机名。
2. 有效的用户凭证:您需要拥有目标 Linux 系统上的一个用户名及其对应的密码,或者配置好的SSH 密钥。
3. SSH 服务运行:目标 Linux 系统上必须安装并运行着 SSH 服务器(通常是 OpenSSH Server)。
4. Windows 上的 SSH 客户端:Windows 10 (1809 版本或更高) 和 Windows 11 已内置了 OpenSSH 客户端。这是连接的关键工具。对于较早版本的 Windows,需要手动安装 OpenSSH 客户端或使用第三方工具如 PuTTY。
验证 Windows SSH 客户端可用性
在 cmd 中运行以下命令,检查 SSH 客户端是否可用:
ssh -V
如果返回类似 OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2 的版本信息,则表明客户端已安装并可正常使用。
基础连接方法
使用密码认证连接是最简单的方式:
1. 打开 cmd:在 Windows 搜索栏输入 “cmd” 并打开命令提示符。
2. 输入连接命令:使用以下格式的命令:
ssh username@hostname_or_ip
例如,用户名为 “user”,Linux 主机 IP 为 “192.168.1.100”,则命令为:
ssh user@192.168.1.100
3. 首次连接信任主机:第一次连接到该服务器时,会收到关于服务器 主机密钥 的警告信息。输入 yes 确认并接受密钥,将其存入本地信任列表(known_hosts 文件)。
4. 输入密码:系统会提示您输入该用户在该 Linux 主机上的密码。输入密码时,屏幕上通常不会有任何显示(不回显),这是正常的安全措施。输入完成后按回车。
5. 成功登录:如果用户名和密码正确,您将看到 Linux 系统的命令行提示符(如 user@hostname:~$),表示您已成功通过 SSH 连接到 Linux 主机,可以在其上进行操作了。
使用 SSH 密钥认证(更安全的方式)
密钥认证比密码更安全,也更方便(无需每次输入密码):
1. 在 Windows 上生成密钥对:在 cmd 中运行:
ssh-keygen -t rsa -b 4096
按提示选择保存密钥的文件路径(默认为用户目录下的 .ssh\id_rsa)和设置密钥密码(可选,但推荐)。生成后,会在指定目录得到两个文件:私钥(如 id_rsa)和 公钥(如 id_rsa.pub)。
2. 将公钥部署到 Linux 服务器:使用密码登录或其他方式,将公钥文件(id_rsa.pub)的内容,追加 到 Linux 服务器上目标用户家目录下的 .ssh/authorized_keys 文件中。如果目录或文件不存在,需要手动创建(注意设置正确的权限:.ssh 目录为 700,authorized_keys 文件为 600)。可以使用 ssh-copy-id 命令(如果可用)简化此过程:
ssh-copy-id -i C:\Users\YourUser\.ssh\id_rsa.pub user@192.168.1.100
3. 使用密钥连接:在 cmd 中运行:
ssh -i C:\path\to\private_key user@192.168.1.100
如果设置了密钥密码,会提示输入该密码。成功后即可登录。
常用连接参数与选项
SSH 命令支持多种参数以满足不同需求:
| 参数 | 作用 | 示例 |
|---|---|---|
| -p port | 指定 SSH 服务的端口(默认是 22) | ssh -p 2222 user@host |
| -i identity_file | 指定使用的私钥文件路径 | ssh -i ~/.ssh/custom_key user@host |
| -v | 详细输出模式(调试用),可叠加使用 -v -v -v 获取更详细日志 | ssh -v user@host |
| -o option | 设置特定的连接选项 | ssh -o "StrictHostKeyChecking=no" user@host (首次连接自动接受密钥,有安全风险) ssh -o "ConnectTimeout=10" user@host (设置连接超时为 10 秒) |
扩展:端口转发 (Port Forwarding)
SSH 的端口转发功能非常强大,可以实现安全隧道:
本地端口转发:将远程服务器的某个端口映射到本地。
ssh -L local_port:remote_host:remote_port user@ssh_server
例如:ssh -L 8080:localhost:80 user@linuxhost 将访问本机 8080 端口的流量通过 SSH 隧道转发到 linuxhost 的 80 端口。
远程端口转发:将本地的某个端口映射到远程服务器。
ssh -R remote_port:local_host:local_port user@ssh_server
例如:ssh -R 2222:localhost:22 user@linuxhost 在 linuxhost 上开启 2222 端口,访问该端口的流量会被转发回发起命令的 Windows 机器的 22 端口。
扩展:使用 scp 或 sftp 进行文件传输
基于 SSH 协议,可以在 cmd 中使用 scp (Secure Copy) 命令进行文件传输:
从 Windows 复制文件到 Linux:
scp C:\path\to\local\file user@linuxhost:/path/to/remote/directory/
从 Linux 复制文件到 Windows:
scp user@linuxhost:/path/to/remote/file C:\path\to\local\directory\
对于交互式文件管理,可以使用 sftp 命令建立一个交互式的 SFTP 会话:
sftp user@linuxhost
登录后,可以使用类似 FTP 的命令(ls, cd, get, put, mkdir 等)进行文件操作。
连接问题排查
遇到连接失败时,可参考以下步骤:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| “ssh' is not recognized...” | OpenSSH 客户端未安装或未启用 | Windows 10/11:检查“设置”->“应用”->“可选功能”中是否安装了 OpenSSH 客户端。旧版 Windows:安装第三方客户端如 PuTTY。 |
| “Connection refused” | 目标主机 SSH 服务未运行或防火墙阻止 | 检查 Linux 主机 SSH 服务状态 (systemctl status sshd),确保防火墙开放 SSH 端口(默认 22)。 |
| “Permission denied” | 用户名/密码错误、密钥认证失败、公钥未正确部署、服务器认证配置限制 | 检查凭证;检查公钥是否在 Linux 用户的 .ssh/authorized_keys 文件中;检查 Linux 上 /etc/ssh/sshd_config 中 PubkeyAuthentication, PasswordAuthentication 等设置。 |
| “Host key verification failed” | 服务器密钥已更改或本地 known_hosts 文件中的旧记录冲突 | 确认服务器密钥更改是否合法(如服务器重装)。若合法,可删除 ~/.ssh/known_hosts 文件中对应的旧记录,重新连接接受新密钥。谨慎使用 StrictHostKeyChecking=no 选项(有安全风险)。 |
总结
掌握在 cmd 中使用 ssh 命令连接 Linux 是进行远程系统管理的基础。通过理解 SSH 协议、掌握密码和密钥认证方式、熟悉常用参数和扩展功能(如端口转发、文件传输),以及具备基本的问题排查能力,您可以高效、安全地管理您的远程 Linux 系统。始终优先考虑使用密钥认证以提高安全性。