在 WSL 的 Ubuntu 中安装和配置 SSH 服务

Windows Subsystem for Linux (WSL) 为开发者提供了在 Windows 环境中运行 Linux 的便利。本文将详细介绍如何在 WSL 的 Ubuntu 中安装、配置和管理 SSH 服务器,让你能够通过 SSH 远程连接到你的 Linux 环境。

1. 安装 OpenSSH 服务器

首先,我们需要安装 OpenSSH 服务器软件包:

bash 复制代码
sudo apt update
sudo apt install openssh-server

2. 启动 SSH 服务

安装完成后,启动 SSH 服务:

bash 复制代码
# 启动 SSH 服务
sudo systemctl start ssh

3. 设置 SSH 服务开机自启动

重要修正: 应该使用 Linux 系统的服务管理方式来设置自启动,而不是手动创建脚本。

bash 复制代码
# 启用 SSH 服务开机自启动
sudo systemctl enable ssh

# 验证自启动设置
sudo systemctl is-enabled ssh

如果输出显示 enabled,说明 SSH 服务已经设置为开机自启动。

4. 检查 SSH 服务状态

确认 SSH 服务是否正常运行:

bash 复制代码
# 检查服务状态
sudo systemctl status ssh

提示: 如果服务正常运行,你会看到绿色的 "active (running)" 状态信息。

5. 配置 SSH(可选但推荐)

编辑 SSH 配置文件以满足你的需求:

bash 复制代码
sudo vi /etc/ssh/sshd_config

重要配置项说明:

bash 复制代码
# 允许密码登录
PasswordAuthentication yes
# 允许 root 用户登录(谨慎使用)
PermitRootLogin yes
# 更改默认端口(提高安全性)
Port 2222
# 仅允许本地连接
ListenAddress 127.0.0.1
# 允许所有连接
ListenAddress 0.0.0.0

6. 重启 SSH 服务

修改配置后需要重启服务使更改生效:

bash 复制代码
# 重启SSH服务
sudo systemctl restart ssh

7. 设置用户密码

如果要使用密码登录,需要设置用户密码:

bash 复制代码
# 设置当前用户密码
passwd

# 设置 root 密码(如果允许 root 登录)
sudo passwd root

8. 防火墙配置

如果启用了防火墙,需要允许 SSH 连接:

bash 复制代码
# 安装 ufw
sudo apt install ufw
# 允许 SSH 连接
sudo ufw allow ssh
# 或指定端口
sudo ufw allow 22
# 启用防火墙
sudo ufw enable

9. Windows 防火墙配置

在 Windows 中允许 SSH 端口:

  1. 打开 Windows Defender 防火墙
  2. 点击"高级设置"
  3. 添加入站规则,允许 TCP 端口 22(或自定义端口)

10. 连接测试

从 Windows 连接:

bash 复制代码
# 使用 Windows 的 SSH 客户端
ssh username@localhost

# 如果更改了端口
ssh username@localhost -p 2222

从 WSL 内部测试:

bash 复制代码
ssh username@127.0.0.1

11. WSL 特殊情况处理

WSL 注意事项: WSL 的"开机自启动"概念与传统 Linux 系统不同,因为 WSL 实例只在需要时启动。

如果你发现 SSH 服务在 WSL 重启后没有自动启动,可以考虑以下解决方案:

方案一:使用 systemd(推荐用于 WSL 2)

确保 WSL 2 启用了 systemd 支持:

bash 复制代码
# 编辑 /etc/wsl.conf
[network]
generateResolvConf = false

[boot]
systemd = true

然后重启 WSL:

bash 复制代码
wsl --shutdown

方案二:创建 WSL 启动脚本

如果 systemd 不可用,可以创建一个简单的启动脚本:

bash 复制代码
# 编辑 ~/.bashrc 或 ~/.profile
# 添加以下内容到文件末尾
if service ssh status | grep -q "ssh start/running"; then
    echo "SSH already running"
else
    sudo service ssh start
fi

12. 常用管理命令

bash 复制代码
# 启动 SSH 服务
sudo systemctl start ssh
# 停止 SSH 服务
sudo systemctl stop ssh
# 重启 SSH 服务 
sudo systemctl restart ssh
# 查看 SSH 服务状态
sudo systemctl status ssh
# 启用开机自启动 
sudo systemctl enable ssh
# 禁用开机自启动 
sudo systemctl disable ssh
# 查看 SSH 进程 
ps aux | grep sshd`

故障排除

检查端口是否监听:

bash 复制代码
netstat -tuln | grep 22
# 或
ss -tuln | grep 22

查看 SSH 日志:

bash 复制代码
sudo journalctl -u ssh -f

# 或查看传统日志
sudo tail -f /var/log/auth.log

验证配置文件语法:

bash 复制代码
sudo sshd -t

WSL 2 网络问题解决:

如果从外部无法连接,可能需要配置 WSL 2 的网络:

bash 复制代码
# 编辑 /etc/wsl.conf
[network]
generateHosts = true

然后重启 WSL:

bash 复制代码
wsl --shutdown

安全建议

重要安全提示: 为了保护你的系统安全,建议采取以下措施:

  1. 使用密钥认证而不是密码认证
  2. 更改默认端口(22)以提高安全性
  3. 禁用 root 登录避免直接使用管理员账户
  4. 使用防火墙限制访问来源
  5. 定期更新系统保持软件版本最新

禁用 root SSH 登录(推荐):

bash 复制代码
# 编辑 SSH 配置
sudo vi /etc/ssh/sshd_config

# 设置为
PermitRootLogin no

使用密钥认证:

bash 复制代码
# 在客户端生成密钥对
ssh-keygen -t rsa -b 4096

# 将公钥复制到服务器
ssh-copy-id username@localhost

# 或手动复制
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

总结

通过以上步骤,你已经成功在 WSL Ubuntu 中安装并配置了 SSH 服务器。现在你可以通过 SSH 安全地远程连接到你的 WSL 环境,享受 Linux 开发的便利。

记住定期检查和更新你的安全配置,确保系统的安全性。

常见问题解答

Q: 为什么连接被拒绝?

A: 检查 SSH 服务是否启动、防火墙设置、端口配置是否正确。

Q: 如何更改 SSH 端口?

A: 在 /etc/ssh/sshd_config 中修改 Port 参数,然后重启服务。

Q: WSL 重启后 SSH 服务会自动启动吗?

A: 在 WSL 2 中启用 systemd 后,使用 sudo systemctl enable ssh 可以实现服务自启动。

Q: 如何完全卸载 SSH 服务器?

A: sudo apt remove openssh-server


本文档旨在帮助开发者在 WSL 环境中配置 SSH 服务器。请根据实际需求调整安全配置。

相关推荐
zhengfei6113 小时前
CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡
linux·运维·tcp/ip
叼烟扛炮4 小时前
Linux 学习笔记(六十一):网络编程毕业设计——Reactor 反应堆模式
linux·网络·笔记·学习·课程设计
xyzzklk4 小时前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
叼烟扛炮6 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
David猪大卫12 小时前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
叼烟扛炮14 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
Ruiery14 小时前
Linux 6.6内核内存管理深度解析(十五):CMA 连续内存分配器
linux·运维·服务器
测试界的小码农15 小时前
【Linux 命令实战(01):认识 Linux 终端,从零掌握第一个命令】
linux·运维·服务器
布裘15 小时前
【银河麒麟】重启后时区丢失?排查发现 localtime 被业务程序替换成硬链接
linux·运维·网络
GeW18 小时前
高端化转型进入“补底层”阶段:Linux与数据库的再定位
linux