在 Ubuntu 虚拟机上设置 SSH 以从 Windows 主机访问的教程

本教程基于您的 Ubuntu 虚拟机(IP: 192.168.50.128,使用 ens33 接口)和 Windows 主机环境。假设虚拟机运行在 VMware 或 VirtualBox 等软件中,使用 NAT 或桥接网络模式。教程分为准备、安装配置和测试部分。所有命令在 Ubuntu 终端执行(使用 xiaozhao 用户)。

前提条件

  • Ubuntu 已连接网络,能运行 apt 命令。
  • Windows 主机已安装 SSH 客户端(如果没有,可在 PowerShell 中使用内置 OpenSSH,或安装 PuTTY)。
  • 虚拟机网络设置允许主机访问(如果是 NAT 模式,可能需在虚拟机软件中配置端口转发)。

步骤 1: 查看 Ubuntu 的 IP 地址

  1. 打开 Ubuntu 终端(Ctrl + Alt + T)。

  2. 执行命令查看所有接口的 IP:

    ip addr show
    
    • 查找 ens33(或类似接口)下的 inet 行,例如:192.168.50.128/24。这是您的本地 IPv4 地址。
    • 备选快速命令:hostname -I(显示所有 IP,空格分隔)。

    注意:如果需要公网 IP(外部访问),运行 curl ifconfig.me

步骤 2: 安装和配置 SSH 服务

SSH 服务允许远程登录。如果未安装或未运行,会导致 “Connection refused” 错误。

  1. 更新软件源:

    sudo apt update
    
  2. 安装 OpenSSH Server(如果已安装,会跳过):

    sudo apt install openssh-server
    
  3. 启动 SSH 服务:

    sudo systemctl start ssh
    
  4. 启用开机自启:

    sudo systemctl enable ssh
    
  5. 检查服务状态:

    sudo systemctl status ssh
    
    • 输出应显示 “Active: active (running)”。如果失败,重启服务或检查日志:sudo journalctl -u ssh

步骤 3: 配置防火墙

Ubuntu 默认可能启用 UFW 防火墙,需允许 SSH 端口(默认 22)。

  1. 允许 SSH:

    sudo ufw allow ssh
    
  2. 重载防火墙:

    sudo ufw reload
    
  3. 检查状态:

    sudo ufw status
    
    • 确保 “SSH” 显示 “ALLOW”。
  4. 验证端口监听:

    sudo ss -tuln | grep :22
    
    • 应看到类似 tcp LISTEN 0 128 0.0.0.0:22 的输出。

步骤 4: 从 Windows 主机测试连接

  1. 在 Windows 命令提示符(cmd)或 PowerShell 中,测试连通性:

    ping 192.168.50.128
    
    • 如果成功(有回复),网络正常;否则检查虚拟机网络设置。
  2. 尝试 SSH 连接:

    ssh xiaozhao@192.168.50.128
    
    • 首次连接会提示接受主机密钥,输入 yes
    • 输入 Ubuntu 用户 xiaozhao 的密码。
    • 如果端口非默认(检查 /etc/ssh/sshd_config 中的 Port),添加 -p 端口号

常见问题排查

  • Connection refused:SSH 未运行或防火墙阻塞。重启服务并检查 UFW。
  • No route to host:网络问题。确保虚拟机和主机在同一子网,或配置桥接模式。
  • Permission denied:密码错误,或需设置密钥认证(生成密钥对:ssh-keygen,然后复制公钥到 VM 的 ~/.ssh/authorized_keys)。
  • 超时:检查虚拟机防火墙、软件端口转发,或重启 VM。
  • 如果是公网访问:获取主机公网 IP,并配置路由器端口转发(22 到 VM IP)。

安全提示

  • 使用强密码或密钥认证。
  • 限制 SSH 访问:编辑 /etc/ssh/sshd_config(如禁用 root 登录:PermitRootLogin no),然后重启服务:sudo systemctl restart ssh
  • 监控日志:sudo tail -f /var/log/auth.log

完成这些步骤后,您应能从 Windows 成功 SSH 到 Ubuntu。如果遇到具体错误,运行相关命令并分享输出以进一步诊断。

写文章用