通过 SSH 连接 OCI Linux 实例

从 Windows、macOS 或 Linux 使用正确用户、私钥和主机指纹首次连接 OCI Linux 实例。

#type / howto #status / growing #tech / network #resource / oracle-cloud #resource / ssh #protocol / ssh #platform / server

[!abstract] 成功状态 本机能够用指定私钥登录正确的实例,主机指纹已验证,远端用户具有预期 sudo 权限,并且没有通过聊天或命令行泄露私钥。

通过 SSH 连接 OCI Linux 实例

前置条件

  • 实例 Running;
  • VNIC 有可访问的公网 IPv4/IPv6;
  • NSG/Security List 允许你的来源访问 SSH;
  • 私钥在本机安全路径;
  • 知道镜像默认用户。

常见默认用户:Ubuntu 是 ubuntu,Oracle Linux 通常是 opc。不要默认直接用 root

1. 检查本地密钥

PowerShell:

Get-Item $env:USERPROFILE\.ssh\oci_a1
ssh-keygen -lf $env:USERPROFILE\.ssh\oci_a1.pub

Linux/macOS:

chmod 600 ~/.ssh/oci_a1
ssh-keygen -lf ~/.ssh/oci_a1.pub

私钥内容不应出现在终端历史、截图、工单或 AI 对话中。AI 只需要密钥文件路径。

2. 首次连接

Ubuntu 示例:

ssh -i ~/.ssh/oci_a1 -o IdentitiesOnly=yes ubuntu@203.0.x.x

Windows PowerShell 路径:

ssh -i "$env:USERPROFILE\.ssh\oci_a1" -o IdentitiesOnly=yes ubuntu@203.0.x.x

自定义端口使用 -p 2222。注意小写 -p 是端口,大写 -P 常用于其他工具。

3. 验证主机指纹

首次连接会显示 ED25519/RSA 主机密钥指纹。不要无脑输入 yes

  • 与 OCI 控制台、串行控制台或可信通道取得的指纹比较;
  • 确认 IP 确实属于刚创建的实例;
  • 记录实例重装会改变主机密钥。

登录后可在服务器查看:

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

4. 验证远端身份和权限

whoami
hostnamectl
cat /etc/os-release
uname -m
sudo -n true && echo 'passwordless sudo available' || sudo -v
ip address

核对主机名、发行版、架构和 IP,防止连错机器后执行初始化。

5. 写入 SSH config

本机 ~/.ssh/config

Host oci-a1
    HostName 203.0.x.x
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/oci_a1
    IdentitiesOnly yes
    ServerAliveInterval 30
    ServerAliveCountMax 3

以后使用:

ssh oci-a1
scp ./file.txt oci-a1:/tmp/

不要在 config 中写私钥口令。

6. 为私钥设置口令

若现有私钥没有口令:

ssh-keygen -p -f ~/.ssh/oci_a1

使用 ssh-agent 缓存解锁状态,而不是复制出无口令副本。

验证清单

  • 主机指纹已通过独立来源核对
  • whoami 是预期用户而非意外 root
  • uname -m 与所选 Shape 一致
  • sudo 可用
  • ~/.ssh/config 别名可连接
  • 私钥未上传到服务器或仓库
  • OCI 控制台和串行控制台恢复入口仍可用

常见问题

Permission denied (publickey)

检查用户是否正确、密钥是否与创建实例时的公钥匹配、IdentitiesOnly、本地权限和服务器 authorized_keys。见 OCI SSH 与端口连通性排查

Connection timed out

通常是地址、路由、云规则或主机防火墙,不是密钥错误。

REMOTE HOST IDENTIFICATION HAS CHANGED

先确认是否重装、IP 被重新分配或存在中间人风险。确认合法变更后再执行:

ssh-keygen -R 203.0.x.x

不要把“删除 known_hosts”当作默认修复。

创建于 2026/7/20 更新于 2026/7/20