Win ssh サーバ設定 @PowerShell
2024/03/28 00:09
確認環境
実際に動作を確認した環境は、以下の通りです。ただし、想定する対象としては、Windows Server 2022, Windows Server 2019, Windows 11, Windows 10 (Microsoft 公式情報より)になります。
PowerShell 起動(管理者モード)
システムへの変更を行うため、管理者モードで PowerShell を起動します。管理者モードで起動
Win キーを押し、そのまま power shell と入力します。検索結果に Windows PowerShell が表示されたら、「管理者として実行する」を選択します。
このとき、ユーザアカウント制御が表示された場合は「はい」を押して続けます。
起動確認
タイトルバーに「管理者:Windows PowerShell」が表示された画面が起動することを確認します。sshd インストール
対象バージョン名称確認
インストールする PowerShell のバージョン情報を表示します。PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
画像では見辛いですが、以下のように表示されることを確認します。
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' Name : OpenSSH.Client~~~~0.0.1.0 State : Installed Name : OpenSSH.Server~~~~0.0.1.0 State : Installed PS C:\WINDOWS\system32>
インストール
次のコマンドを実行します。PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
インストール画面
しばらく、CUI 上にインストール状況が表示されます。インストール結果画面
続けて、OpenSSH がインストールされたことを確認します。PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Path : Online : True RestartNeeded : False PS C:\WINDOWS\system32>
サーバ設定
サービス起動
sshd サービスを起動します。PS C:\WINDOWS\system32> Start-Service sshd
サービス自動起動
sshd サービスを、自動起動するよう設定変更します。PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType 'Automatic'
余談(スタートアップの種類を変更)
ちなみに、以下のコマンドでサービスの停止やスタートアップの種類を変更できます。サービス停止
PS C:\WINDOWS\system32> Stop-Service -Name sshd※ sshd は、中断と再開をサポートしていないため、中断できないようです。
スタートアップの種類
「自動」の場合PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Automatic「手動」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Manual「無効」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Disabled
Firewall
必要に応じて、ファイアウォール設定を行います。# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) { Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..." New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 } else { Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists." }
鍵の生成
鍵を生成するには、以下のコマンドを実行します。ssh-keygen -t ed25519※ 記事の作成時点では、rsa より ed25519 が推奨されています。適切に指定してください。
実行例
PS C:\WINDOWS\system32> ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\test/.ssh/id_ed25519): Created directory 'C:\\Users\\test/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\test/.ssh/id_ed25519 Your public key has been saved in C:\Users\test/.ssh/id_ed25519.pub The key fingerprint is: SHA256:vNdhiYXL3ci1SDWYKf+pv2SOLiXSdDBWWFCKsNJzlk0 test@Win100 The key's randomart image is: +--[ED25519 256]--+ | . E*++o | | . o =*o+. . | | . + =.+=o . | | . = ..Bo* . | | So+.O.o. | | ..oo..o | | ...o..o | | .. .= | | oo.+. | +----[SHA256]-----+ PS C:\WINDOWS\system32> PS C:\WINDOWS\system32> dir C:\Users\test\.ssh\ ディレクトリ: C:\Users\test\.ssh Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2024/03/27 23:29 399 id_ed25519 -a---- 2024/03/27 23:29 95 id_ed25519.pub PS C:\WINDOWS\system32>公開鍵 id_ed25519.pub を、リモートアクセスしたい相手側サーバに適切に設定すると、鍵を利用した ssh 接続が可能になります。
公開鍵の格納先
Windows でも Linux でも、id_ed25519.pub の内容を、そのまま全部、1行で authorized_keys ファイルに記載してください。公開鍵は「公開してしまう鍵」なので、ファイルを開いてコピペするなど、多少雑に扱っても問題ありません。
Windows ssh サーバ
sshd サービスが動いている Windows サーバの、ユーザプロファイル直下に .ssh フォルダを作成して配置します。例として、test ユーザのユーザプロファイル情報を表示します。
PS C:\WINDOWS\system32> echo $env:USERPROFILE\.ssh\ C:\Users\test\.ssh\ PS C:\WINDOWS\system32> dir C:\Users\test\.ssh\authorized_keys ディレクトリ: C:\Users\test\.ssh Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2024/03/27 23:29 95 authorized_keys PS C:\WINDOWS\system32>
Linux サーバ
ユーザのホームディレクトリ直下に .ssh ディレクトリを作成して配置します。例として、test ユーザのホームディレクトリ情報を表示します。
$ test@rasp080:~/.ssh $ ls -ld ~/.ssh drwx------ 2 test test 4096 3月 27 23:41 /home/test/.ssh test@raspberry:~/.ssh $ test@raspberry:~/.ssh $ ls -l ~/.ssh/authorized_keys -rw------- 1 test test 0 3月 27 23:41 /home/test/.ssh/authorized_keys※ Linux サーバは、特に権限情報が重要視されます。 .ssh ディレクトリは 700 かつ authorized_keys は 600 にしてください。
適切に設定すると、以下のように ssh 接続可能です。
sshd アンインストール
インストールした sshd をアンインストールするには、次のコマンドで実行できます。Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
参考
- https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=powershell
- https://learn.microsoft.com/ja-jp/powershell/scripting/samples/managing-services?view=powershell-7.4
- https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement