Skip to content
Go back

Windows PCをSSHサーバーとして設定する

Published:  at  12:00 AM

この記事では、Windows PCをSSHサーバーとして設定し、macOSからリモートでSSH接続する方法を紹介します。

使っていないWindows PCを自宅のLAN内でサーバーとして活用し、メインで使用しているMacBookからWindowsにSSH接続してリモート作業ができるようにしたいと思い、設定を行ってみました。

クライアント側はLinux環境でも動作すると思われますが、本記事では検証していません。

環境

Windows側の設定 (サーバー側)

まずはパスワード認証でのSSH接続を設定します。秘密鍵を用いての認証は後述します。

OpenSSHのインストール

WindowsにOpenSSHをインストールします。Windows 10では拡張機能としてGUIからインストールできます。

  1. [設定] → [システム] → [オプション機能] でOpenSSHを検索
  2. 見つからない場合は [機能の追加] からOpenSSH Serverをインストール

SSHサービスの設定

PowerShellを管理者権限で実行し、以下の手順を行います:

  1. SSH用のポート(22)を開放:

    netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=22
  2. sshdを起動:

    Start-Service sshd
  3. PC起動時にsshdを自動起動するよう設定:

    Set-Service sshd -StartupType Automatic

Git Bashの導入 (オプション)

デフォルトのPowerShellではなくGit Bashを使用したい場合:

  1. Git for Windowsからインストーラーをダウンロードしインストール
  2. 管理者権限のPowerShellで以下を実行:
    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force
    これでSSHログイン時のデフォルトシェルがGit Bashになります。

接続情報の確認

クライアントからSSH接続する際に必要な情報を確認します。ここで確認した情報はクライアント側で使用します。

  1. IPアドレスの確認:

    ipconfig
  2. ユーザー名の確認:

    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

クライアントからの接続

macOSから以下のコマンドで接続:

ssh {serverのユーザー名}@{serverのIPアドレス}

注意: ユーザー名にバックスラッシュ\を含む場合、macOSからSSHする際は/に読み替えてください。

接続がうまくいかない場合は、-vvvオプションを付けてログを確認できます。

公開鍵認証の設定

より安全でパスワード入力が不要な、公開鍵認証の設定方法を説明します。

クライアント側 (macOS)

  1. 公開鍵を生成(多くの記事が存在するので、方法は割愛)
  2. 生成した公開鍵をサーバーに送信:
    scp ~/.ssh/your_keyfile_ed25519.pub {serverのユーザー名}@{serverのIPアドレス}:~/.ssh/

サーバー側 (Windows)

ここからの設定で自分は詰まってしまい、時間がかかってしまいました。

こちらのStackOverflowの回答がとても参考になったので、もし下記の手順で詰まったら参照してみてください。

  1. クライアントから送信した公開鍵ファイルのリネーム: ~/.ssh/your_keyfile_ed25519.pub~/.ssh/authorized_keys

  2. ~/.ssh/authorized_keysのパーミッション設定変更:

    • 権限の継承をOFF
    • SYSTEM, USER(Windowsのユーザー)以外の権限を削除
  3. C:\ProgramData\ssh\sshd_configの編集:

    公開鍵認証を有効化し、パスワード認証を無効化します:

    -#PubkeyAuthentication yes
    +PubkeyAuthentication yes
    -#PasswordAuthentication yes
    +PasswordAuthentication no

    以下のMatch Group administrators ...で始まる2行がコメントアウトされていない場合、コメントアウトしてください:

    -Match Group administrators
    -       AuthorizedKeysFile __PROGRAMDATA__/ssh/   administrators_authorized_keys
    +#Match Group administrators
    +#       AuthorizedKeysFile __PROGRAMDATA__/ssh/   administrators_authorized_keys

    補足:

    • C:\ProgramDataはエクスプローラ上でCドライブを開いても表示されないかもしれませんが、アドレスバーに直接打ち込めば開けるはずです。
    • C:\Windows\System32\OpenSSHにも似たファイルsshd_config_defaultがありますが、そちらをいじっても設定は反映されません。
  4. sshdの再起動:

    Restart-Service sshd

クライアントからの接続

macOSから以下のコマンドで接続:

ssh {serverのユーザー名}@{serverのIPアドレス}

パスワードを入力せずに接続できれば成功です。

トラブルシューティング

まとめ

Windows PCをSSHサーバーとして設定し、macOSからリモートでSSH接続する方法を解説しました。

本来はTmuxを使ってセッションが切れてもプロセスを継続できるようにしたかったのですが、Git Bashでの設定が上手くいかず、今回は断念しました。いずれ再トライしてみたいと思います。



Previous Post
SatoriでのOGP画像生成に日本語フォントを使う - astro-paper向けガイド
Next Post
WeekNotes: 2024-07-11