在 Windows 7 上配置由 OpenSSH 初始化的默认 shell

mle*_*gge 6 ssh openssh sshd

有没有办法在 Windows 7 上配置OpenSSH以初始化默认 Windows 命令外壳以外的另一个外壳?

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:~
$
Run Code Online (Sandbox Code Playgroud)

或者,安装 Cygwin 并在附加的 Net 包中包含 OpenSSH 会导致默认的 Cygwin shell,所以同样的问题存在:有没有办法在安装后配置由 OpenSSH 初始化的 shell?

编辑:

谢谢@simlev 建议使用 Cygwin 我已经改写了我的问题以更清楚地代表我的问题。

Bre*_*sze 9

根据这个你可以配置DefaultShell使用OpenSSH在Windows,是PowerShell的或任何其他可执行文件。

需要添加Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell带有Shell Executable路径的String Registry Key作为字符串值,即:

  • Powershell:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

  • CygWin Bash:C:\Cygwin64\bin\bash.exe

我测试了它并按预期工作。


来自 Win32-OpenSSH wiki:

在服务器端,在 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。


sim*_*lev 6

我的热情建议是使用Cygwin在您的 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
Run Code Online (Sandbox Code Playgroud)

当然可以自定义 shell:默认情况下包含 ash、bash、dash 和 sh,但只需运行 Cygwin 安装程序,您就可以添加您选择的 zsh、mksh、tcsh 或 posh。然后将以下行添加到/etc/nsswitch.conf

db_shell: /bin/sh
Run Code Online (Sandbox Code Playgroud)

可能替换/usr/bin/sh为您首选外壳的路径。必须重新启动所有 Cygwin 进程(终端窗口和 sshd 服务)才能使设置生效。

甚至有一种方法可以在登录时获得 cmd 或 powershell 提示,我最近在Stackoverflow上发现了这一点。

  1. 下载用于 Cygwin 的winpty并解压缩winpty.exewinpty.dll然后winpty-agent.exe/bin. 如果您从 Cygwin 终端外部执行此操作,请查找binCygwin 安装文件夹的子目录。
  2. 在其中创建两个批处理文件/bin并确保它们具有执行权限。让我们将它们命名为 winpty-cmd.bat 和 winpty-powershell.bat 并用以下内容填充它们,其中当然<cygwin path>是您安装 Cygwin 的路径的占位符(默认情况下是C:\cygwin):

    @ECHO OFF
    <cygwin path>\bin\winpty.exe cmd
    
    Run Code Online (Sandbox Code Playgroud)

    @ECHO OFF
    <cygwin path>\bin\winpty.exe powershell
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将这些行之一放入/etc/nsswitch.conf

    db_shell: /bin/winpty-cmd.bat
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    db_shell: /bin/winpty-powershell.bat
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重新启动 sshd 服务。

由于标题已被“改写”,我的帖子现在可能看起来有点不合适,请允许我直接回答原始问题:

“从 Linux ssh 时使用 git bash 而不是 cmd”

除了在 Windows 机器上使用 Cygwin 接受 ssh 连接:

  1. 按照1.上面的步骤。
  2. 创建一个<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"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将此行放入/etc/nsswitch.conf

    db_shell: /bin/winpty-gitbash.bat
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重新启动 sshd 服务。

更新 - 2018 年 9 月:

事情发生了变化,Win32-OpenSSH现在允许通过在注册表项中设置其路径来选择默认 shell(实际上是任何 shell)。请参阅Brethlosze最近的回答