LoginSignup
0
0

More than 3 years have passed since last update.

WindowsのOpenSSHでGitサーバーを立ち上げる

Last updated at Posted at 2020-09-28

はじめに

Git for Windowsにはsshdが添付されてるのでそのままサーバーとして運用出来る・・・はずなんですが情報も少ないし面倒な割にサービス起動出来ないなど制約も多い
WindowsにはOpenSSHが用意されていますのでこっちでサーバーを立ち上げた方が潰しが利くかな、ということでやってみた備忘録です

自分のメモ用なので他の環境では違う可能性があるのはご承知おきください_○□=

メリット

  • Windowsなので気軽にGitサーバーの立ち上げが出来る
  • OpenSSHを使うことで潰しが利く・・・かも?
  • 容量がいっぱい使える(gitの商業サービスは容量制限がキツい)

デメリット

  • Githubのような商業サービスで出来る高度なことはほとんど出来ない
  • OpenSSHでデフォルトシェルをbashに切り替えるので他の理由でsshにログインするときもbashを使用することになります:innocent:
  • SSHアクセス時のShellをBashにしてしまうので、Git以外でログインのときもBashを使うことに・・・
  • 不正アクセス等の対策も別途考えないと大変なことに

準備

今回環境&使用したものです

設定方法

1)Gitのインストール

  • Gitのインストール
    大体はデフォルトのままでOKなので割愛します

    ただし一つ注意点として、現在のバージョンではアルファベット以外のユーザー名に問題が生じることがあるようです

    その場合には"Configuring the terminal emulator to use with Git Bash"で"Use Windows'default console window"を選ぶ必要があります
    GitInstall_termial emulator.png

  • Pathの設定
    環境変数PathにGitのフォルダを追加します
    環境変数Pathの設定

C:\Program Files\Git\cmd
C:\Program Files\Git\usr\bin
C:\Program Files\Git\bin
C:\Program Files\Git\mingw64\bin
C:\Program Files\Git\mingw64\libexec\git-core

2)OpenSSHのインストール

  • 配置
    上のリンクからダウンロードした場合zipにそのまま固まっていますので、OpenSSH用のフォルダC:\OpenSSHを作り展開します
    OpenSSHFolder

  • Pathの設定
    環境変数PathにOpenSSHのフォルダを追加します

C:\OpenSSH\
  • PowerShellを管理者特権で起動し、スクリプトの起動制限を解除
    スクリプトを使用するので起動制限を解除します。危険なので後で制限復帰をするのを忘れずに!
PowerShell
PS c:\> Set-ExecutionPolicy Bypass                 //スクリプトの制限解除

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):Y

PS c:\> Get-ExecutionPolicy                       //ちゃんと設定出来たか確認
Bypass                                            //Bypass:確認なしにすべてのスクリプトを実行
  • sshのインストールスクリプトを実行する
PowerShell
PS C:\OpenSSH> .\install-sshd.ps1
[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
[SC] ChangeServiceConfig2 SUCCESS
sshd and ssh-agent services successfully installed
  • ポートの開放
    ここではポート22を開放してます、変更する場合は他の値にします
    ちなみに22にするとエラい勢いで知らないところからアクセスされます。変更おすすめ
PowerShell
PS C:\> New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
PS C:\> netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
  • パーミッションの変更
    OpenSSHではパーミッションが重要になります。スクリプトがあるので任せましょう(最初手動でやって失敗した(汗)
    ユーザーを新しく作ったり関連する部分のパーミッションを弄った場合でsshが上手く動かなかった時にもこのスクリプトを使います
PowerShell
PS C:\OpenSSH> .\FixHostFilePermissions.ps1
  • スクリプトの起動制限を復帰
PowerShell
PS c:\>Set-ExecutionPolicy Restricted            //スクリプトの制限復帰

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):Y

PS c:\>Get-ExecutionPolicy                       //ちゃんと設定出来たか確認
Restricted                                       //Restricted:すべてのスクリプトを制限
  • サービスの自動起動の設定
PowerShell
PS C:\> Set-Service sshd -StartupType Automatic       //自動起動の設定
  • サービスの起動と再起動
    sshdを起動・再起動したい場合のコマンド
PowerShell
PS C:\> net start sshd                                //起動
PS C:\> restart-service sshd                          //再起動

3)Gitにアクセスするユーザーアカウントの作成と設定

  • ユーザーアカウントの作成
    Gitで使用するユーザーアカウントを作成する
    CreateUser.png
    (ここではGitUserというアカウントを作成しています)

  • Gitのglobal情報の設定
    Gitのグローバル情報を設定する(globalは各ユーザーごとに管理される設定です)

PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser> git config --global user.name "username"                  //利用者情報(名前)
PS C:\Users\GitUser> git config --global user.email "username@mymailserver.jp" //利用者情報(メールアドレス)
PS C:\Users\GitUser> git config --global core.quotepath false                  //日本語を表示するための設定
PS C:\Users\GitUser> git config --global sendpack.sideband false               //gitプロトコルでpushするとハングアップすることがあるのを防止
  • SSH用フォルダの作成
    • SSH用のユーザー個別フォルダc:\Users\ユーザーアカウント\.sshフォルダを作成します
PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser> mkdir .ssh
  • SSH鍵の作成
PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser> ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\GitUser/.ssh/id_rsa):        //作成ファイル名の指定:(規定値ならそのままEnter)
Enter passphrase (empty for no passphrase):                                //パスフレーズの指定:(不要ならそのままEnter)
Enter same passphrase again:                                               //パスフレーズの再確認

(この方法でrsa形式で鍵長2048byteの秘密鍵ファイルid_rsaと公開鍵ファイルid_rsa.pubの2ファイルが作成されます。セキュリティ的に不安であれば形式を変えたり鍵長を長くするなど出来ます。詳細は他の詳しいサイトを参考にしてください)

  • SSH公開鍵の設定
    • SSH用のユーザー個別フォルダc:\Users\ユーザーアカウント\.sshフォルダに公開鍵を設定します
PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser\.ssh> cat id_rsa.pub >> authorized_keys
  • SSH設定ファイルsshd_configの変更
    C:\ProgramData\ssh\sshd_configにあるSSHの設定ファイルを変更します
Port 22                            //ポート番号
PasswordAuthentication no          //パスワード認証:不許可(これをしないと折角鍵認証を設定してもパスワードで入れてしまう)
  • パーミッションの変更
    PowerShellにてスクリプトの実行を許可した後、OpenSSHで使用したパーミッション修正スクリプトを再度実行する
PowerShell
PS C:\OpenSSH> .\FixHostFilePermissions.ps1 -Confirm:$false
  • デフォルトシェルをBashに変更
    シェルをBashに変更しないとGitのコマンドが上手く動きません
PowerShell
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force 
  • 動作確認

    • OpenSSH動作確認
      クライアント側からSSHでリモートログインしてみる

      PowerShellからリモートログインしてみて接続出来れば成功です。
      ssh.exe -i id_rsa GitUser@ServerName -p 22
          id_rsa : 秘密鍵
          GitUser : アクセスユーザー名
          ServerName : サーバー名もしくはサーバーのIPアドレス
          22 : SSHポート番号
       
    • Git動作確認
      クライアント側からGitコマンドで操作してみる

      Commandラインから以下のようなgitコマンドを使用し正常に終了すれば成功です
      git clone ssh://GitUser@ServerName:22/c/repos/sample.git
          GitUser : アクセスユーザー名
          ServerName : サーバー名もしくはサーバーのIPアドレス
          22 : SSHポート番号
          c/repos/sample.git : サーバーのGitリポジトリの場所(最初のcはドライブ)

おわりに

サーバーの設定は以上です

えーとここまでやっておいてなんですが、出来れば商業サービス使った方が楽だと思います(^^;
今回はいくつかの事情により難しいと判断した故の苦肉の策ですので

それと趣旨が変わるので今回は書かなかったのですがセキュリティ面でも上記だけではダメなのでしっかり追加対処しましょう!

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0