在 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 服务器。请根据实际需求调整安全配置。

相关推荐
姓王名礼1 天前
一份 Windows/macOS/Linux 完整安装 + 运行 + 对接 WebUI 的步骤
linux·windows·macos
idolao1 天前
CentOS 7 安装 nginx-1.3.15.tar.gz 详细步骤(从源码编译到启动配置)
linux·运维·数据库
yaoxin5211231 天前
358. Java IO API - 使用 relativize() 创建路径之间的相对关系
java·linux·python
亚林瓜子1 天前
linux账号强制密码过期导致私钥文件登录异常问题——(current) UNIX password:
linux·运维·服务器·ssh·aws·ec2·chage
Code_LT1 天前
【AIGC】Claude Code Rules配置
linux·ubuntu·aigc
LXY_BUAA1 天前
《嵌入式操作系统》_驱动框架_20260318
linux·运维·服务器
淮北也生橘121 天前
Linux应用开发:全链路 OTA 升级架构
linux·架构·ota·linux应用开发
小黑要努力1 天前
json-c安装以及amixer使用
linux·运维·json
JiMoKuangXiangQu1 天前
Linux:ARM64 启动流程
linux·arm64 boot
TroubleMakerQi1 天前
[虚拟机环境配置]07_Ubuntu中安装vscode教程
linux·人工智能·vscode·ubuntu