一. 背景

最近突然想把手头的ipad利用起来,作为一部分生产力(笑)而不只是bilibili启动器
而我在wsl2中部署的Centos7已经形成了一套完备的开发环境,所以能否在ipad上访问我的Centos终端呢?

二. ssh连接Windows Powershell7

注:以下涉及的命令最好均使用管理员终端执行

检查安装windows openssh
  1. 在Powershell中输入:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
  1. 检查返回是否为:
Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed
  1. 否则执行以下命令安装OpenSSH,没有哪个安哪个:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
  1. 或者你也可以使用windows 设置->应用->应用和功能->可选功能里找到对应功能点击安装,此处不再赘述
    安装结束后再执行之前所述的代码检查一下返回是否均为installed
启动SSH服务器
# 启动sshd服务
Start-Service sshd
# 设置开机自启动
Set-Service -Name sshd -StartupType 'Automatic'
设置端口(可选)
  1. ssh默认端口为22端口,如果你想要更换端口或者跟我一样喜欢折腾,可以使用以下步骤更换端口
    1). 选择一个你心仪的端口,检查好是否有冲突,此处以2222端口为例
    2). 打开控制面板,查看方式:小图标,windows defender防火墙
    3). 点击高级设置,你可以看到新开了一个窗口,有入站出站规则
    4). 因为我们是外部访问windows内部,所以只需要配置入站规则即可
    * 点击入站规则,右边新建规则,
    * 新窗口点击端口,
    * 下一页,特定本地端口,输入上述你选好的端口
    * 下一页,允许连接
    * 下一页,默认即可
    * 下一页,给你的端口起个容易辨认的名字
    * 完成
    5). 打开 “C:\ProgramData\ssh\sshd_config” ,第9行 Port 22取消注释,改成对应端口号,保存退出(使用记事本可能无法保存,建议使用vscode尝试)
    6). 输入以下命令重启ssh服务
net stop sshd
net start sshd
# 检查2222端口是否开启
netstat -an | findstr /i ":2222"

只需要配置远程ssh访问wsl2的到这里可直接看第三部分

开启密钥登录
  1. 安全起见我们还是要设置密钥登录,这部分内容可直接根据微软官方提供的文档来操作:
    OpenSSH for Windows 中基于密钥的身份验证
本地测试登录
  1. 到这里应该可以使用私钥和公钥来进行ssh连接windows了
# 默认22端口,如果更换了端口则需要-p,否则不需要
ssh "用户名"@"本机ip" -p 2222 -i "本地密钥位置"
  1. 接着根据提示输入你电脑的开机密码进行登录,如果是用微软账户登录的windows则输入微软账户密码
    测试成功则继续下一步,如果像我一样反复出现permision denied报错,尝试重启一下电脑再试试,还不行的话只能自己排查了,这个我也不知道什么bug导致的
修改默认shell
  1. 连接成功后你会发现默认的shell几乎没什么命令可以用,所以我们直接更换为powershell7
    参考微软官方文档:为 Windows 中的 OpenSSH 配置默认 shell 命令:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "Powershell7安装位置(pwsh.exe的位置)" -PropertyType String -Force
  1. 注意:windows默认的powershell位置为 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    powershell7 默认安装位置为 C:\Program Files\PowerShell\7\pwsh.exe
大功告成

三. 开启wsl2局域网远程ssh

检查sshd_service
  1. 以CentOS7为例,执行
systemctl status sshd
  1. 未启动则执行
systemctl start sshd
# 设置自启
systemctl enable sshd
shell中使用ifconfig查看wsl2的ip
开放端口
配置端口转发
# 修改connectaddress参数为你的wsl2ip地址
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2223 connectaddress="wsl2ip地址" connectport=22
测试登录
  1. 使用以下代码测试:
ssh "linux用户名"@192.168.xx.xx -p 2223
  1. 注意:
    1). @后为你windows的ip,而不是wsl2中安装的linux的ip,因为我们已经配置了接口转发所以可以通过Windows的指定端口访问到linux
    2). 如果使用root账户,记得使用passwd root命令设置密码,贴主就忘了
大功告成,Enjoy!