基础连接性测试 (最常用)
这个测试的目的是验证你是否能够成功登录到远程服务器。

场景1:使用用户名和密码登录 (适用于临时测试或未配置密钥的情况)
这是最直接的方式,系统会提示你输入密码。
命令格式:
ssh -l <用户名> <远程主机IP或域名> # 或者更常见的格式: ssh <用户名>@<远程主机IP或域名>
示例:
假设你的用户名是 testuser,远程服务器 IP 是 168.1.100。
ssh testuser@192.168.1.100
如何判断测试结果:

-
成功:
- 终端会提示你输入密码:
testuser@192.168.1.100's password: - 你输入密码(输入时不会显示任何字符),然后按回车。
- 如果认证成功,你将直接看到远程服务器的命令行提示符(
[testuser@server ~]$),表示你已经成功登录。
- 终端会提示你输入密码:
-
失败:
- 连接被拒绝:
ssh: connect to host 192.168.1.100 port 22: Connection refused- 可能原因: 远程主机的 SSH 服务未启动,或者防火墙阻止了 22 端口。
- 无路由到主机:
ssh: connect to host 192.168.1.100 port 22: No route to host- 可能原因: 网络不通,检查你的网络连接、IP 地址是否正确。
- 权限被拒绝 (publickey,password):
Permission denied (publickey,password).- 可能原因: 这是最常见的错误之一,通常意味着服务器只允许密钥登录,或者你的用户名/密码错误。
- 认证失败:
Permission denied, please try again.- 可能原因: 你输入的密码错误。
- 连接被拒绝:
高级功能性测试
当你已经能成功连接后,可以测试 SSH 的一些高级功能。
场景2:使用 SSH 密钥对登录 (更安全、更方便)
这是生产环境推荐的方式,你需要先在本地生成密钥,并将公钥上传到服务器。

步骤 1: 在本地生成 SSH 密钥 (如果还没有的话)
# 一路按回车使用默认选项即可 ssh-keygen -t rsa -b 4096
这会在 ~/.ssh/ 目录下生成 id_rsa (私钥) 和 id_rsa.pub (公钥)。
步骤 2: 将公钥复制到远程服务器
# 方法A: 使用 ssh-copy-id 命令 (最简单) ssh-copy-id -i ~/.ssh/id_rsa.pub testuser@192.168.1.100 # 方法B: 手动复制 (ssh-copy-id 不可用) # 1. 在本地查看公钥内容 cat ~/.ssh/id_rsa.pub # 2. 复制输出的全部内容 # 3. 登录到远程服务器 (用密码) ssh testuser@192.168.1.100 # 4. 在远程服务器上,将公钥追加到 authorized_keys 文件中 mkdir -p ~/.ssh chmod 700 ~/.ssh echo "粘贴刚才复制的公钥内容到这里" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
步骤 3: 测试密钥登录
ssh testuser@192.168.1.100
如何判断测试结果:
- 成功: 直接登录,无需输入密码。
- 失败: 仍然提示输入密码或
Permission denied。- 可能原因:
- 远程服务器
~/.ssh/authorized_keys文件权限不正确,必须是600。 - 远程服务器 SSH 服务配置 (
/etc/ssh/sshd_config) 中PubkeyAuthentication被设置为no。 - 你上传的是公钥,但登录时使用的是错误的私钥。
- 远程服务器
- 可能原因:
诊断和调试测试
当你遇到连接问题时,这些选项可以帮助你定位问题。
场景3:启用详细模式 (Verbose Mode)
ssh 命令的 -v (verbose) 选项会打印出详细的调试信息,这对于排查连接问题非常有用,你可以使用多个 -v 来增加详细程度(-vvv 最详细)。
命令:
ssh -vvv testuser@192.168.1.100
你会看到什么:
- 本地 SSH 客户端的版本信息。
- 尝试的认证方法(如:尝试公钥、尝试密码等)。
- DNS 解析过程。
- TCP 连接的建立过程(
Connecting to 192.168.1.100 port 22)。 - 远程 SSH 服务器版本和密钥交换信息。
- 如果连接失败,这里会明确指出在哪一步失败了(是网络不通,还是认证失败)。
如何判断测试结果:
通过阅读 -vvv 的输出,你可以精确地定位到问题所在,如果看到 debug1: Trying private key: /home/your_user/.ssh/id_rsa,然后紧接着 debug1: Offering public key: /home/your_user/.ssh/id_rsa RSA SHA256:xxx agent,debug1: Authentications that can continue: publickey,password,就说明密钥认证失败了,服务器回退到密码认证。
场景4:指定非标准的 SSH 端口
有些服务器为了安全,会将 SSH 服务的端口从默认的 22 修改为其他端口(2222),这时需要使用 -p 选项。
命令:
ssh -p 2222 testuser@192.168.1.100
如何判断测试结果:
- 成功: 像往常一样登录。
- 失败: 如果忘记
-p选项,会提示Connection refused,因为客户端在尝试连接 22 端口。
场景5:执行远程命令而不登录交互式 Shell
有时候你只需要在远程服务器上执行一个命令,然后立即返回本地。
命令:
# 在远程服务器上创建一个文件 ssh testuser@192.168.1.100 "touch /tmp/test_file_from_ssh" # 在远程服务器上查看系统负载 ssh testuser@192.168.1.100 "uptime"
如何判断测试结果:
- 成功: 命令会立即在本地终端执行并显示其输出,然后返回本地命令行,你不会进入远程服务器的 Shell。
- 失败: 会看到命令执行的错误信息,
bash: touch: command not found(如果远程服务器没有touch命令)或Permission denied。
场景6:测试端口转发 (隧道)
SSH 可以创建安全的加密隧道,这是一个更高级的测试,但功能强大。
本地端口转发:
将本地机器的某个端口(本地:8080)的流量,通过 SSH 服务器(jump-server.com)转发到目标服务器(internal-db.example.com:3306)的某个端口。
命令:
ssh -L 8080:internal-db.example.com:3306 testuser@jump-server.com
这个命令会建立一个 SSH 连接并保持,然后在你的本地机器上,访问 localhost:8080 就相当于访问 internal-db.example.com:3306。
如何判断测试结果:
- 成功: 命令会挂起,不返回命令行,这表示隧道已建立,你可以打开另一个终端,使用
telnet或nc测试本地端口:# 在另一个终端窗口执行 telnet localhost 8080
如果能成功连接,说明隧道工作正常。
- 失败:
telnet连接失败,检查ssh -L命令中的端口、目标地址和用户名是否正确。
一个典型的测试流程
- 检查网络:
ping <远程主机IP>确保网络是通的。 - 基础测试:
ssh -vvv <用户名>@<远程主机IP>,使用-vvv看看详细的连接过程。 - 检查认证:
-vvv显示在尝试密码,说明密钥未配置成功,检查authorized_keys文件和权限。-vvv显示在尝试公钥但失败,检查本地私钥路径是否正确。
- 测试功能: 尝试执行一个简单命令,如
ssh <用户名>@<远程主机IP> "ls -l",确认连接是功能性的。 - 检查配置: 如果以上都失败,检查远程服务器上的 SSH 配置文件
/etc/ssh/sshd_config和本地客户端的配置文件~/.ssh/config。
