この記事では、Windows PCをSSHサーバーとして設定し、macOSからリモートでSSH接続する方法を紹介します。
使っていないWindows PCを自宅のLAN内でサーバーとして活用し、メインで使用しているMacBookからWindowsにSSH接続してリモート作業ができるようにしたいと思い、設定を行ってみました。
クライアント側はLinux環境でも動作すると思われますが、本記事では検証していません。
環境
- サーバー: Windows 10 Pro (バージョン 22H2, OS ビルド 19045.3208)
- クライアント: macOS 14.5 (23F79)
Windows側の設定 (サーバー側)
まずはパスワード認証でのSSH接続を設定します。秘密鍵を用いての認証は後述します。
OpenSSHのインストール
WindowsにOpenSSHをインストールします。Windows 10では拡張機能としてGUIからインストールできます。
- [設定] → [システム] → [オプション機能] でOpenSSHを検索
- 見つからない場合は [機能の追加] からOpenSSH Serverをインストール
SSHサービスの設定
PowerShellを管理者権限で実行し、以下の手順を行います:
-
SSH用のポート(22)を開放:
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=22
-
sshdを起動:
Start-Service sshd
-
PC起動時にsshdを自動起動するよう設定:
Set-Service sshd -StartupType Automatic
Git Bashの導入 (オプション)
デフォルトのPowerShellではなくGit Bashを使用したい場合:
- Git for Windowsからインストーラーをダウンロードしインストール
- 管理者権限のPowerShellで以下を実行:
これでSSHログイン時のデフォルトシェルがGit Bashになります。New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force
接続情報の確認
クライアントからSSH接続する際に必要な情報を確認します。ここで確認した情報はクライアント側で使用します。
-
IPアドレスの確認:
ipconfig
-
ユーザー名の確認:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
クライアントからの接続
macOSから以下のコマンドで接続:
ssh {serverのユーザー名}@{serverのIPアドレス}
注意: ユーザー名にバックスラッシュ\
を含む場合、macOSからSSHする際は/
に読み替えてください。
接続がうまくいかない場合は、-vvv
オプションを付けてログを確認できます。
公開鍵認証の設定
より安全でパスワード入力が不要な、公開鍵認証の設定方法を説明します。
クライアント側 (macOS)
- 公開鍵を生成(多くの記事が存在するので、方法は割愛)
- 生成した公開鍵をサーバーに送信:
scp ~/.ssh/your_keyfile_ed25519.pub {serverのユーザー名}@{serverのIPアドレス}:~/.ssh/
サーバー側 (Windows)
ここからの設定で自分は詰まってしまい、時間がかかってしまいました。
こちらのStackOverflowの回答がとても参考になったので、もし下記の手順で詰まったら参照してみてください。
-
クライアントから送信した公開鍵ファイルのリネーム:
~/.ssh/your_keyfile_ed25519.pub
→~/.ssh/authorized_keys
-
~/.ssh/authorized_keys
のパーミッション設定変更:- 権限の継承をOFF
- SYSTEM, USER(Windowsのユーザー)以外の権限を削除
-
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
がありますが、そちらをいじっても設定は反映されません。
-
sshdの再起動:
Restart-Service sshd
クライアントからの接続
macOSから以下のコマンドで接続:
ssh {serverのユーザー名}@{serverのIPアドレス}
パスワードを入力せずに接続できれば成功です。
トラブルシューティング
- サーバー側でsshの設定が反映されない場合は
Restart-Service sshd
を実行するかPCを再起動してください - クライアント側でWarpをターミナルで使用している場合、ssh接続がすぐに切断されることがあります。Warp SSH Wrapperを無効化してみてください:
- SSH接続時に
-vvv
オプションを付けてログを確認することで、問題の特定ができるかもしれません
まとめ
Windows PCをSSHサーバーとして設定し、macOSからリモートでSSH接続する方法を解説しました。
本来はTmuxを使ってセッションが切れてもプロセスを継続できるようにしたかったのですが、Git Bashでの設定が上手くいかず、今回は断念しました。いずれ再トライしてみたいと思います。