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

相关推荐
Hard but lovely2 小时前
linux: centos 软件包管理 yum源
linux·运维·centos
悲伤小伞3 小时前
Linux_Socket_UDP
linux·服务器·网络·c++·网络协议·udp
安全不再安全3 小时前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
pursue.dreams3 小时前
Ubuntu安装Jenkins完整教程
linux·ubuntu·jenkins
实心儿儿3 小时前
Linux系统 —— 基础命令1
linux·运维·服务器
大龄Python青年4 小时前
C#快入教程:Linux安装.NET
linux·c#·.net
抠脚学代码4 小时前
Linux开发-->驱动开发-->字符设备驱动框架
linux·数据结构·驱动开发
Elias不吃糖5 小时前
第四天学习总结:C++ 文件系统 × Linux 自动化 × Makefile 工程化
linux·c++·学习
噜啦噜啦嘞好5 小时前
Linux进程信号
linux·运维·服务器