Windows で OpenSSH SFTP サーバーを立ち上げるのは、特に初めての場合は少し面倒な作業になるかもしれません。SSH サービスが自動起動しない、ファイアウォール ルールが設定されていない、設定ファイルが正しくないなどの問題に遭遇するかもしれません。幸いなことに、手順に従って設定を慎重に確認すれば、扱いにくいサードパーティ製ツールよりもはるかに安全な転送設定を実現できます。この設定は非常に柔軟性が高く、Windows 10 (ビルド 1803 以降) から Windows Server 2022 まで、バージョンによって多少の違いはありますが、あらゆる OS で動作します。最終的には、パスワードを漏らしたり、不安定な FTP オプションに頼ったりすることなく、SSH 経由で安全にファイルを転送できるようになります。そして、ほとんどの人と同じように、私にとっての目的は、セキュリティを強化し、管理を簡素化することだけでした。念のためお知らせしますが、Windows のバージョンによっては、コマンドやパスが若干異なる場合がありますが、基本的な考え方は同じです。
Windows で SFTP 用に OpenSSH を動作させる方法
WindowsにOpenSSHをインストールする方法
Windowsではここがちょっと厄介なところです。OpenSSHが最初から組み込まれている場合もあれば、手動でインストールしなければならない場合もあります。Windows 10(1803以降など)、Windows 11、Windows Server 2019/2022の新しいバージョンでは、OpenSSHはオプション機能として提供されています。Windowsはインストールを必要以上に難しくしているため、PowerShell経由でインストールできます。
- PowerShell を管理者として開き、次を実行します。
Add-WindowsCapability -Online -Name OpenSSH. Server* - または、コマンドラインを好む場合は、次を使用します。
dism /Online /Add-Capability /CapabilityName:OpenSSH. Server~~~~0.0.1.0 - GUI スタイルでは、[設定] > [アプリ] > [オプション機能] > [機能の追加] に移動し、OpenSSH サーバー を見つけてインストールします。
- 次のようにインストールされているかどうかを確認します。
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
インストールが完了すると、実行ファイルは通常 にありますc:\windows\system32\OpenSSH\。メインの設定ファイルはにあるsshd_configC:\ProgramData\sshです。このフォルダが最初から存在しない場合は、まず sshd サービスを開始する必要があります。Windows はフォルダを動的に作成します。
C:\OpenSSH-Win、インストール手順に従ってください(フォルダをPath環境変数に追加することを含む)。また、.\install-sshd.ps1そのディレクトリでPowerShellから実行することもできます(スクリプトがブロックされている場合に使用してくださいpowershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1)。インストールが完了したら、サービスを有効にします。
Set-Service -Name sshd -StartupType 'Automatic' Start-Service sshd
SSHサービスとファイアウォールの設定
さて、自動的に起動し、ポート22が開かれることを確認することが重要です。最近のWindowsでは、以下の手順を実行できます。
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
このコマンドが機能しない場合は、おそらく古いビルドまたは特定のエンタープライズ構成で、次を試してください。
netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22
これにより、Windows Defenderファイアウォールのポート22が開き、SSHサーバーがブロックされなくなります。ただし、より厳格な企業ファイアウォールやルーターを使用している場合は、そちらでもポート22を開く必要があることに注意してください。
SFTP 用の sshd_config の調整
メモ帳などのテキスト エディターで構成ファイルを開きます。
C:\ProgramData\ssh\sshd_config
Subsystem sftp行を見つけます。次のようになっているはずです。
Subsystem sftp sftp-server.exe
コメントアウトされていたり、どこかが間違っている場合は修正してください。他のオプションもここで調整できます。
- 接続できるユーザーを制限するには、 AllowGroupsを設定します(ドメインまたはローカルグループを使用)。例:
AllowGroups domain\sftpusers - パスワード認証を有効にするには:
AuthenticationMethods password - ChrootDirectoryとForceCommand internal-sftpを使用して、各ユーザーの chroot ディレクトリ(接続後の移動先)を設定します。例:
Match User username ChrootDirectory C:\SFTP\username ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
一部の設定では、変更後に sshd サービスを再起動すると効果的です。
Restart-Service sshd
SFTPサーバーへの接続
設定が完了したら、接続してみましょう。WinSCP などの無料クライアント、または Posh-SSH などのモジュールを備えた PowerShell を使用できます。WinSCP の場合は、プロトコルを SFTP に設定し、サーバーの IP アドレスまたはホスト名、ユーザー名、パスワードまたは SSH キーを入力します。接続時に、ホストキーがキャッシュに存在しないという警告が表示される場合がありますが、サーバーを信頼できる場合はそのまま受け入れてください(またはフィンガープリントを手動で検証してください)。
Posh-SSHモジュールとの接続をテストするための簡単な PowerShell スニペットを次に示します。
Install-Module -Name Posh-SSH $cred = Get-Credential $session = New-SFTPSession -ComputerName 192.168.1.100 -Credential $cred Get-SFTPChildItem -SFTPSession $session -Path / #...do stuff...Remove-SFTPSession -SFTPSession $session
組み込みのコマンドラインを使用する場合は、PowerShell を開いて次のコマンドを実行します。
sftp username@server
または、鍵ベースの認証を使用する場合は、SSH秘密鍵を指定します-i path\to\privatekey。慣れてしまえば非常に簡単です。
公開鍵認証の設定
この部分は少し面倒ですが、パスワードレスログインをしたいなら、やる価値は十分にあります。 を使ってローカルでSSHキーを作成しますssh-keygen -t ed25519。id_ed25519 (秘密鍵)とid_ed25519.pub (公開鍵)が生成されます。
id_ed25519.pubを SFTP サーバーにコピーし、ユーザーの に配置しますC:\Users\username\.ssh\authorized_keys。Windows は、適切なユーザーのみがファイルにアクセスできないように細心の注意を払わないため、権限が適切であることを確認してください。
次に、SSHクライアント(WinSCPやPowerShellなど)でその秘密鍵を使用するように設定します。WinSCPの場合は、「詳細設定」>「SSH」>「認証」 に移動し、秘密鍵ファイルを選択します。PowerShellの場合は、前の例のように鍵ファイルを指定できます。
ええ、一度正しく設定すれば、毎回パスワードを入力しなくても接続できるようになります。なぜそうなるのかはよく分かりませんが…とにかくそうなるんです。
まとめ
初めての方は、全体のプロセスが少し複雑に感じるかもしれませんが、一度設定すれば、Windowsマシンは非常に安全で信頼性の高いSFTPサーバーになります。設定の詳細、つまり適切な権限の設定、ポートの開放、sshd_configの適切な編集などに注意してください。これがセットアップの成否を左右します。まずはWinSCPで接続を試してみてください。それがうまくいけば、PowerShellも簡単に使えるようになります。鍵認証の設定には少し手間がかかりますが、利便性とセキュリティを考えると、その価値は十分にあります。
まとめ
- Windows のバージョンに応じて、PowerShell または GUI 経由で OpenSSH をインストールします。
- sshd サービスを有効にして起動し、自動起動に設定します。
- ポート 22 を許可するようにファイアウォール ルールを構成します。
- セキュリティとディレクトリの設定に合わせて sshd_config を調整します。
- WinSCP または PowerShell モジュールを使用してテストします。
- 必要に応じて、パスワードなしのログイン用の SSH キーを設定します。
まとめ
Windowsを適切なSFTPサーバーにする方法を、これで少しでも理解していただけたら幸いです。完璧ではありませんが(Windowsは権限や設定パスに関して少々癖がある場合があります)、この方法は古くて扱いにくい方法よりもはるかに優れています。すべてが整っていれば、SSH経由で安全にファイルを転送することがはるかに簡単になり、より安全に感じられます。この方法が、最初のハードルを乗り越える助けになれば幸いです。WindowsでSSHを設定するのは、かなり複雑なので、何度かつまずいてしまうことがあります。