web-dev-qa-db-ja.com

Windows7でOpenSSHによって初期化されたデフォルトのシェルを構成します

デフォルトのWindowsコマンドシェル以外の別のシェルを初期化するようにWindows7で OpenSSH を構成する方法はありますか?

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をインストールしてOpenSSHを追加のNetパッケージに含めると、デフォルトのCygwinシェルが作成されるため、同じ質問があります。インストール後にOpenSSHによって初期化されたシェルを構成する方法はありますか?

編集:

Cygwinの使用を提案してくれた@simlevに感謝します。私の問題をより明確に表すために、質問を言い換えました。

4
mlegge

Win32-OpenSSHは、ソースのデフォルトシェルとしてcmd.exeをハードコードします。Shell-Host.cの行 978-984 および 1081-1086 を参照してください。そうは言っても、デフォルトのシェルを変更する唯一の方法は、それらの場所でシェルを変更し、OpenSSHを再コンパイルすることであるように思われます。

私の温かいお勧めは、Windowsマシンでssh接続を受け入れるために Cygwin を使用することです。これにより、リモートシステムからssh経由でBashシェルとコマンドラインgitにログインしたり、そこからscpしたりすることができます。

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

シェルはもちろんカスタマイズできます。ash、bash、dash、shがデフォルトで含まれていますが、Cygwinインストーラーを実行するだけで、zsh、mksh、tcsh、またはposhのいずれかを追加できます。次に、次の行を/etc/nsswitch.confに追加します。

db_Shell: /bin/sh

おそらく、/usr/bin/shを優先シェルへのパスに置き換えます。設定を有効にするには、すべてのCygwinプロセス(ターミナルウィンドウとsshdサービス)を再起動する必要があります。

ログイン時にcmdまたはpowershellプロンプトを取得する方法もあります。これは最近 Stackoverflow で見つけました。

  1. Cygwinの winpty をダウンロードし、winpty.exewinpty.dll、およびwinpty-agent.exe/binに抽出します。 Cygwinターミナルの外部からこれを行う場合は、Cygwinインストールフォルダーのbinサブディレクトリを探します。
  2. /binに2つのバッチファイルを作成し、それらに実行権限があることを確認します。それらに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
    
  3. これらの行の1つを/etc/nsswitch.confに入れます。

    db_Shell: /bin/winpty-cmd.bat
    

    または

    db_Shell: /bin/winpty-powershell.bat
    
  4. Sshdサービスを再起動します。

タイトルが「書き直され」、私の投稿が少しずれているように見えるかもしれないので、元の質問に直接答えさせてください。

「Linuxからsshするときは、cmdの代わりにgitbashを使用してください」

Cygwinを使用してWindowsマシンで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"
    
  3. この行を/etc/nsswitch.confに入れます:

    db_Shell: /bin/winpty-gitbash.bat
    
  4. Sshdサービスを再起動します。

更新-2018年9月:

状況が変わり、 Win32-OpenSSH で、レジストリキーにパスを設定することで、デフォルトのシェル(実際には任意のシェル)を選択できるようになりました。 Brethlosze の最近の answer を参照してください。

6
simlev

this によると、WindowsのOpenSSHのDefaultShellを、PowerShellまたはその他の実行可能ファイルとして構成できます。

文字列値としてShellExecutableのパスを使用して、文字列レジストリキーComputer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellを追加する必要があります。

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

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

私はそれをテストし、期待どおりに動作します。


Win32-OpenSSH wikiから:

サーバー側で、Windowsレジストリでデフォルトのsshシェルを構成します。

  • Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell-シェル実行可能ファイルのフルパス
  • Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellCommandOption(オプション)-構成済みのデフォルトシェルがコマンドを実行し、すぐに終了して呼び出しプロセスに戻るために必要なスイッチ。デフォルトでは、これは-cです。
  • Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellEscapeArguments(オプション)-デフォルトのシェルの引数のエスケープをスキップできるようにするフラグ。デフォルトでは、これは0です。このオプションは、powershell、powershell、bash、cygwin、cmd、およびssh-shellhost.exe以外のシェルにのみ適用できます。
3
Brethlosze

FWIW、OpenSSHのCygwinポートのパッケージをまとめました。これには、使いやすいインストーラーと、PDFおよびCHM形式の詳細なドキュメントが含まれています。Githubにあります:

https://github.com/Bill-Stewart/CygSSH

Cygwin v3を使用するため、専用のサービスアカウントは必要ありません(サービスはSYSTEMとして実行されます)。

私の意図は、Windowsマシンにインストールして使用するのに(比較的)便利なCygwinとrsyncの便利なパッケージを構築することでした。そのため、Windows中心のデフォルトと機能がいくつかあります。

  • インストーラーはサイレントインストールとシステムパスへの追加をサポートします
  • Windows PowerShellは、リモートインタラクティブシェルです
  • 認証用にSSH Usersローカルグループを作成し、デフォルトでsshd_configに設定します。ネストされたグループがサポートされています(たとえば、GPOを介してメンバーシップを管理する場合)
  • アカウントへのsftpのみのアクセスの許可をサポートします
  • rsyncが含まれます

Vista/Server2008以降およびWindowsPowerShell2.0以降が必要です。

0
Bill_Stewart