Windowsにsshd、sftp-serverの実行環境を構築する

  • 0
    いいね
  • 1
    コメント

    概要

    Windows10にsshd、sftp-serverの実行環境を構築したときのメモです。
    sshd、sftp-serverは、MicrosoftがWindows向けに開発しているWin32-OpenSSHを使用しました。

    環境

    • Windows10 Professional
      • PowerShell 5.1
      • Win32-OpenSSH 0.0.0.6

    参考

    SSHで使用するポートの設定

    デフォルトはポート22ですが、この例ではポート20022を使用します。
    下記の操作で、Windowsのファイアウォールがポート20022を通すように設定を行います。

    管理者権限でコマンドプロンプトを起動し、下記のコマンドを実行します。

    ルールの追加

    > netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=20022 profile=private
    OK
    

    ルールの確認

    > netsh advfirewall firewall show rule name="sshd"
    
    規則名:                               sshd
    ----------------------------------------------------------------------
    有効:                                 はい
    方向:                                 入力
    プロファイル:                         プライベート
    グループ:
    ローカル IP:                          任意
    リモート IP:                          任意
    プロトコル:                           TCP
    ローカル ポート:                      20022
    リモート ポート:                      任意
    エッジ トラバーサル:                  いいえ
    操作:                                 許可
    OK
    

    ルールの有効化/無効化

    enableに指定する値が"yes":有効化、"no":無効化になります。

    > netsh advfirewall firewall set rule group="sshd" new enable=(yes|no)
    

    なお、画面で操作する場合は、「コントロールパネル → システムとセキュリティ → Windows ファイアウォール → 画面左側メニューの詳細設定」で、左側のメニューから”受信の規則”をクリックし、左側の操作メニューから”新しい規則..."を選択します。
    あとは、新規の受信の規則のウィザードに従ってポートを開放するルールを追加します。

    Tips

    ポート22を開けるルールの追加方法を検索すると、PowerShellで下記のコマンドを使った説明をよく見ますが、この方法が有効なのはWindows Server 2012、Windows 8になります。Window 7または10は、netshコマンドを使う必要があるようです。

    > New-NetFirewallRule -DisplayName "sshd" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
    

    Win32-OpenSSH

    https://github.com/PowerShell/Win32-OpenSSH/releases

    OpenSSH-Win64.zipをダウンロードし、適当な場所へ展開します。
    この例では、展開したディレクトリをC:\OpenSSH-Win64に配置し、このディレクトリを環境変数Pathに追加しました。

    sshd_configの編集

    下記の設定を変更します。

    #Port 22
    Port 20022
    
    #Subsystem  sftp    sftp-server.exe
    Subsystem   sftp    C:\OpenSSH-Win64\sftp-server.exe
    

    インストール

    このディレクトリをカレントディレクトリにして、管理者権限でコマンドプロンプトを起動し下記のコマンドを実行します。

    > powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
    [SC] SetServiceObjectSecurity SUCCESS
    [SC] ChangeServiceConfig SUCCESS
     Granting SeAssignPrimaryTokenPrivilege to NT SERVICE\SSHD   ... successful
    sshd and ssh-agent services successfully installed
    
    > ssh-keygen.exe -A
    ssh-keygen.exe: generating new host keys: RSA DSA ECDSA ED25519
    
    > powershell.exe -ExecutionPolicy Bypass -File install-sshlsa.ps1
    
    
    > ssh-keygen.exe -l -f ssh_host_rsa_key -E md5
    2048 MD5:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** HOME-DEV-PC\rubytomato@home-dev-pc (RSA)
    

    一部マスクしています。
    ここでPCを再起動します。

    サービスの開始

    管理者権限でコマンドプロンプトを起動し、netコマンドでsshdサービスを開始します。
    sshdサービスが開始されると、同時にsftp-serverも使用できるようになります。

    > net start sshd
    
    sshd サービスは正常に開始されました。
    

    サービスの停止

    > net stop sshd
    
    sshd サービスは正常に停止されました。
    

    クライアントの設定

    認証鍵ファイルの作成

    sftpサーバー用の認証鍵ファイルを作成します。
    この例ではPuTTYのPUTTYGET.EXEを使用し、パスフレーズなしで秘密鍵ファイルと公開鍵ファイルを作成しました。

    • 公開鍵ファイル:"sftp_rsa.pub"
    • 秘密鍵ファイル:"sftp_rsa.ppk"

    公開鍵ファイルから、authorized_keysファイルを作成し、C:\Users\USERNAME.sshに配置します。

    > ssh-keygen -i -f sftp_rsa.pub >> authorized_keys
    

    WinSCPの設定

    WinSCPを起動しログイン画面で”新しいサイト”をクリックして設定を追加します。

    ユーザー名には、Windowsアカウントのユーザー名を入力します。

    sftp1.png

    リモートディレクトリを指定します。(しなくても問題ありません。)

    sftp2.png

    秘密鍵にPUTTYGET.EXEで作成した鍵ファイルを指定します。

    sftp3.png