我可以将 MSYS2 Bash 作为 Windows OpenSSH 服务器上的可选 shell 吗?(不是 Windows 10)

我可以将 MSYS2 Bash 作为 Windows OpenSSH 服务器上的可选 shell 吗?(不是 Windows 10)

目标:将 MSYS2/MinGW64 BASH 作为可选 shell 添加到现有 OpenSSH 服务器,以实现自动化目的。

限制:

  • 不是 Windows 10。WSL 不是一个选项。
  • 共享工作环境。除了可以避免的情况外,不应“在其他孩子的游泳池里撒尿”。
  • 将 PowerShell Core 保留为主要 SSH shell。
  • 根据需要以最小的开销提供 MSYS2/MinGW64。
  • 自动化是关键。

设置:

遵循来自 Microsoft 各个来源的说明:

我已成功使 PowerShell 通过 SSH 运行。但是,我有时需要运行 MSYS2/MinGW Bash shell。

KINDA 的工作原理:

  • 从 CLI 在 ssh 中运行 bash:ssh dms3@somehost C:/MSYS64/usr/bin/bash.exe --login(无提示,无法在 PS1 中重新启用)

  • 将 Bash exe 设置为子系统:(最佳情况与上述相同,其他情况则冻结) 子系统 bash c:/MSYS64/usr/bin/bash.exe --login

两者都可能“足够好”以实现自动化。

什么可行,但我宁愿不做:

  • 在不同端口上运行 MSYS sshd 作为第二个 SSH 服务器。
  • 登录 Powershell 后运行 Bash

我不能做什么

  • 使用 Linux VM。
  • 使用 WSL。

答案1

不知道这是否有帮助,但我正在使用随附的 Win10/11 OpenSSH 服务器。在 Windows SSH 服务器上,我使用 CMD 作为我的默认 shell,并且我为我的用户帐户设置了一个环境变量,作为启动 MSYS shell 的别名:

变量名称:MSYS

价值 : "msys2_shell.cmd -defterm -msys -no-start -where C:\Tools\msys64\home\\%UserName%"

注意:MSYS64 目录必须在您的环境 PATH 变量中,这样msys2_shell.cmd才能被找到。

我从 SSH 客户端使用 std SSH 命令手动登录到 Win SSH 服务器:

ssh user@host

这会让我获取服务器上的默认 CMD 提示 shell。在提示符下,我使用我创建的 MSYS 环境变量作为别名命令,方法是输入:

%msys%

这将启动 MSYS Bash shell 并将我的工作目录设置为我的 MSYS 主目录。但是,有一个问题。MSYS 环境变量 HOME 设置为 Windows UserProfile 路径,并且未读取 .bashrc 文件。为了修复 MSYS HOME,我在 .bashrc 文件中添加了“export HOME="/home/username"”。使用 %msys% 变量作为别名登录后,我运行以下命令来读取 .bashrc 文件:

。 /home/用户名/.bashrc

由于我添加的导出命令,MSYS HOME 值发生了改变。

如果我的 Win SSH 服务器设置为使用 Powershell shell 作为默认 shell,我会尝试使用 Powershell 环境别名构造:

$env:MSYS

启动 MSYS Bash shell。但是这不起作用。Powershell 不接受环境变量作为命令的别名。我建议在 SSH 服务器的 Powershell $PROFILE 中设置别名。

答案2

这对我有用

在管理 powershell 中运行

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\msys64\usr\bin\bash.exe" -PropertyType String -Force

相关内容