首页 > 基础资料 博客日记

使用Alpine配置WSL ssh门户

2026-03-30 18:32:22基础资料围观2

这篇文章介绍了使用Alpine配置WSL ssh门户,分享给大家做个参考,收藏极客资料网收获更多编程知识

WSL是一种在Windows设备上运行Linux子系统的方法。一台Windows设备可以运行多个WSL实例,在网络配置得当的情况下,可以通过直接访问宿主机的端口访问WSL中的网络服务,例如ssh。

然而,不同的WSL实例无法同时监听同一个端口。当一台设备运行多个WSL实例时,ssh端口的管理可能会变得十分麻烦。

那么有没有办法统一配置不同WSL实例的ssh登录入口呢?答案是有的,我们可以用一个ssh门户实例来统一处理ssh登录请求,并将它们“转发”到不同的ssh实例中,实现类似堡垒机的功能。

配置Alpine

为了配置一个尽可能小的门户实例,我们可以使用Alpine Linux,其Mini root filesystem分发版的功能十分精简,总体积不到10MB,却足以满足我们的需求。

首先从Alpine下载页下载Mini root filesystem的镜像

然后导入到WSL中

wsl --import Alpine D:\Alpine alpine-minirootfs-latest-x86_64.tar.gz

之后安装和配置openssh服务端

wsl -d Alpine
apk update
apk add openssh-server
ssh-keygen -A

/etc/wsl.conf设置运行时自动启动sshd

[boot]
command="/usr/sbin/sshd"

配置ssh跳转

为了实现“门户”功能,我们将在Alpine中统一开启ssh端口监听,然后根据登录的用户名将ssh请求“转发”到不同的实例中。

OpenSSH配置中的ForceCommand功能可以帮助我们完成这个任务。配置该选项后,ssh登录完成后会强制指定的命令或脚本。我们可以将转发逻辑配置到脚本中,并指定为登录的ForceCommand

/usr/local/bin/triage.sh创建跳转脚本:

#!/bin/sh
[[ "$SSH_ORIGINAL_COMMAND" == "internal-sftp" ]] && SSH_ORIGINAL_COMMAND=/usr/lib/sftp-server
exec /mnt/c/Windows/System32/wsl.exe -d "$USER" --cd "~" $SSH_ORIGINAL_COMMAND

脚本中的$USER$SSH_ORIGINAL_COMMAND分别是传入的登录用户名和命令。
在这个跳转脚本中,我们将传入的用户名映射为WSL实例名,并以默认用户登录。例如,通过ssh Debian@hostname登录将跳转到本机的Debian WSL实例。
为了适配sftp客户端,我们将internal-sftp命令配置为WSL实例的/usr/lib/sftp-server
也可以配置更加复杂的脚本逻辑来跳转到实例中的指定用户。

配置登录用户名

上面的脚本实现了跳转的逻辑,要让门户实例可以登录并实施跳转,我们还需要进行用户和ssh服务端配置。

为了让指定用户名可以用于登录,我们需要在门户实例中创建用户。由于在门户中用户只有登录这一个功能,我们可以不为这些用户配置home文件夹,也无需为其创建同名组。

addgroup homeless
adduser -H -G homeless -h /var/empty Debian

或者可以直接编辑/etc/group/etc/passwd,即在/etc/group中添加一行

homeless:x:1000:

并在/etc/passwd中添加

Debian:x:1001:1000::/var/empty:/bin/sh

然后在/etc/ssh/sshd_config末尾添加

Match Group homeless
	ForceCommand /usr/local/bin/triage.sh

之后通过passwd Debian给用户设置登录密码,即可通过ssh Debian@hostname从门户登录并跳转到对应实例。

如果要配置密钥登录,可以设置

Match Group homeless
	AuthorizedKeysFile /etc/ssh/authorized-keys/%u.pub
	ForceCommand /usr/local/bin/triage.sh

然后通过ssh-keygen -f /etc/ssh/authorized-keys/Debian在/etc/ssh/authorized-keys/下生成密钥对(DebianDebian.pub)。将私钥文件Debian复制到其他设备,即可通过ssh Debian@hostname -i Debian登录。

常见问题

如果可以从本地登录但无法从局域网其他设备访问,可以检查

  • .wslconfig中是否开启了networkingMode=mirrored
  • ssh端口是否被其他程序,包括Windows和其他WSL实例中的程序占用
  • 在Windows防火墙(wf.msc)的入站规则中是否开放了对应的TCP端口

文章来源:https://www.cnblogs.com/Fan-iX/p/-/alpine-wsl-gateway
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云