目标:将 MSYS2/MinGW64 BASH 作为可选 shell 添加到现有 OpenSSH 服务器,以实现自动化目的。
限制:
- 不是 Windows 10。WSL 不是一个选项。
- 共享工作环境。除了可以避免的情况外,不应“在其他孩子的游泳池里撒尿”。
- 将 PowerShell Core 保留为主要 SSH shell。
- 根据需要以最小的开销提供 MSYS2/MinGW64。
- 自动化是关键。
设置:
遵循来自 Microsoft 各个来源的说明:
- https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse
- https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-6
我已成功使 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