WindowsでSSHサーバーをインストールする方法を見ていきます。
SSHクライアントはWindows 10以降にインストールされています。
前提条件
- Windows Server 2019またはWindows 10 (build 1809)以上
- PowerShell 5.1以上
- 管理者アカウント
インストール
-
PowerShellを管理者権限で実行
-
SSHサーバーのインストール
コマンド :
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
出力 :
Path : Online : True RestartNeeded : False
成功裏にインストールされると、OnlineがTrueとして表示されます。
実行
SSHサーバーを実行
-
実行
単独で実行する方法です。
コマンド :
Start-Service sshd
出力 なし
-
サービスの自動実行
Windows起動時に自動で実行されるように設定します。
コマンド :
Set-Service -Name sshd -StartupType 'Automatic'
出力 なし
-
ファイアウォールの許可
ファイアウォールでSSHサーバーが使用する22番ポートへのアクセスを許可します。
コマンド :
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サーバーの状態確認
実際にサービスが実行されているか確認します。
コマンド :
Get-Service -Name 'sshd'
出力 :
Status Name DisplayName ------ ---- ----------- Running sshd OpenSSH SSH Server
StatusがRunningであれば正常に実行されています。
StatusがStoppedであれば、Start-Service sshdコマンドを実行後、再度確認します。 -
接続確認
-
自分のアカウント確認
Windowsインストール初期にMicrosoftアカウントで作成した場合、メールのIDがアカウント名です。
5文字を超えるIDについては変更されるため、正確に確認します。コマンド :
Write-Output $env:UserName
出力 :
xiyo
実際のシステムアカウント名が出力されます。
-
ローカルSSH接続
コマンド :
ssh xiyo@localhost
xiyoを自分のアカウントに変更します。
出力 :
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established. ECDSA key fingerprint is SHA256:D/StxC2FjSpxjD9X+QcXyhHJHb0tfC+Hn9iFMbZooTM. Are you sure you want to continue connecting (yes/no/[fingerprint])?
初回接続時に接続情報を保存します。
yesと入力してエンターを押します。続いてパスワードを尋ねられます。
出力 :
[email protected]'s password:
パスワード入力時には画面に何も表示されません。
パスワードを入力してエンターを押します。成功裏に接続されると新しいコマンドプロンプトが表示されます。
-
外部SSH接続
外部接続はホストのIPアドレスを変更して実行すればよいです。
コマンド :
ssh [email protected]
ローカル接続とシナリオは同じです。
-
トラブルシューティング
外部から接続できない場合
ローカルで接続に成功したが、外部から接続できない場合、いくつかの状況があります。
ファイアウォールのブロック
ネットワークのどこかでファイアウォールがSSH接続をブロックしています。
出力 :
ssh: connect to host 192.168.1.10 port 22: Connection refused
22番ポートが外部からのアクセスをブロックされています。
すべてのファイアウォールを無効にし、サーバーからルーターまで順に有効にしながらテストします。
ホストに接続できない
192.168.1.10を入力する際に、誤って0を一つ追加した状況です。
出力 :
ssh: connect to host 192.168.1.100 port 22: Network is unreachable
ネットワークで見つからないIPアドレスです。
IPアドレスを確認して再試行します。
ホスト接続タイムアウト
192.168.1.10ではなく192.168.2.10の別のネットワーク帯域に接続する状況です。
出力 :
ssh: connect to host 192.168.2.10 port 22: Operation timed out
ネットワーク帯域が異なるため、応答がありません。
IPアドレスを確認して再試行します。