有没有办法配置OpenSSH在 Windows 7 中初始化除默认 Windows 命令 shell 之外的其他 shell?
me@linuxhost:~
$ ssh me@windowshost
me@windowshost's password:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
me@windowshost C:\Users\me> exit
Connection to windowshost closed.
me@linuxhost:~
$
或者,安装 Cygwin 并在附加 Net 包中包含 OpenSSH 会产生默认的 Cygwin shell,因此同样的问题仍然存在:有没有办法在安装后配置由 OpenSSH 初始化的 shell?
编辑:
感谢@simlev 建议使用 Cygwin,我已重新措辞我的问题以更清楚地表达我的问题。
答案1
您可以将 Windows 中 OpenSSH 的 DefaultShell 配置为 PowerShell 或任何其他可执行文件。
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell
它需要添加以可执行文件路径作为字符串值的字符串注册表项。
对于 Powershell,
Set-ItemProperty -verbose -path "HKLM:\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH" -Name "DefaultShell" -Value $(Get-Command powershell.exe).Source
对于 CygWin Bash
Set-ItemProperty -verbose -path "HKLM:\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH" -Name "DefaultShell" -Value "C:\Cygwin64\bin\bash.exe"
cmd.exe
将注册表项设置为空字符串将恢复为用作shell的默认行为。
在服务器端,在windows注册表中配置默认的ssh shell。
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell
- shell 可执行文件的完整路径Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellCommandOption
(可选)- 配置的默认 shell 执行命令所需的开关,立即退出并返回到调用进程。默认情况下,这是-c
。Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellEscapeArguments
(可选)- 允许您跳过转义默认 shell 参数的标志。默认情况下为0
。此选项仅适用于 powershell、powershell、bash、cygwin、cmd 和 ssh-shellhost.exe 以外的 shell。
答案2
我强烈建议使用赛格威在您的 Windows 机器上接受 ssh 连接。这将允许您通过 scp 与其进行通信,以及通过 ssh 从远程系统登录到 Bash shell 和命令行 git。
user@linuxhost$ ssh 192.168.x.x
Last login: Sun Feb 12 08:20:07 2017 from 10.x.x.x
user@windowshost$ echo $0 && git --version
-bash
git version 2.8.3
当然,shell 可以自定义:默认情况下包含 ash、bash、dash 和 sh,但只需运行 Cygwin 安装程序,您就可以添加您选择的 zsh、mksh、tcsh 或 posh。然后将以下行添加到/etc/nsswitch.conf
:
db_shell: /bin/sh
可能/usr/bin/sh
用您首选 shell 的路径替换。必须重新启动所有 Cygwin 进程(终端窗口和 sshd 服务)才能使设置生效。
甚至还有一种方法可以在登录时获取 cmd 或 powershell 提示符,这是我最近在堆栈溢出。
- 下载温普蒂对于 Cygwin 并提取
winpty.exe
,winpty.dll
并winpty-agent.exe
到/bin
。如果您从 Cygwin 终端外部执行此操作,请查找bin
Cygwin 安装文件夹的子目录。 创建两个批处理文件
/bin
并确保它们具有执行权限。我们将它们命名为 winpty-cmd.bat 和 winpty-powershell.bat,并在其中填充以下内容,其中当然是<cygwin path>
您安装 Cygwin 的路径的占位符(默认情况下为C:\cygwin
):@ECHO OFF <cygwin path>\bin\winpty.exe cmd
和
@ECHO OFF <cygwin path>\bin\winpty.exe powershell
将其中一行放入
/etc/nsswitch.conf
:db_shell: /bin/winpty-cmd.bat
或者
db_shell: /bin/winpty-powershell.bat
- 重新启动 sshd 服务。
由于标题已被“改写”,我的帖子现在可能看起来有点不合适,请允许我直接回答原来的问题:
“从 Linux 进行 ssh 时使用 git bash 而不是 cmd”
除了使用 Cygwin 在 Windows 机器上接受 ssh 连接之外:
- 按照上述步骤操作
1.
。 创建一个名为 的文件
<cygwin path>\bin\winpty-gitbash.bat
,其中包含以下内容,其中<cygwin path>
是安装 git-for-windows 的路径的占位符(默认情况下为C:\Program Files\Git
):@ECHO OFF SET PATH="/bin" <cygwin path>\bin\winpty.exe "<git path>\bin\bash.exe"
将此行放入
/etc/nsswitch.conf
:db_shell: /bin/winpty-gitbash.bat
- 重新启动 sshd 服务。
更新 - 2018 年 9 月:
事情在变化,Win32的OpenSSH现在允许通过在注册表项中设置其路径来选择默认 shell(实际上是任何 shell)。请参阅布雷特洛泽最近回答。
答案3
答案4
值得一提的是,我整理了 OpenSSH 的 Cygwin 端口的包装,其中包含一个易于使用的安装程序以及 PDF 和 CHM 格式的详细文档。它在 Github 上:
https://github.com/Bill-Stewart/CygSSH
它使用 Cygwin v3,因此不需要专用的服务帐户(服务以 身份运行SYSTEM
)。
我的目的是构建一个方便的 Cygwin 和 rsync 打包包,使其在 Windows 机器上安装和使用起来(相对)方便,因此它具有一些更加以 Windows 为中心的默认设置和功能:
- 安装程序支持静默安装和添加到系统路径
- Windows PowerShell 是远程交互式 shell
- 它创建一个
SSH Users
用于身份验证的本地组,并默认设置sshd_config
;支持嵌套组(例如,如果您想通过 GPO 管理成员资格) - 它支持授予账户仅 sftp 访问权限
- 这包括
rsync
它需要 Windows 8.1 64 位或 Windows Server 2012 R2 或更高版本。