![[tips][Windows][SSH] Windows版OpenSSHでSSHサーバを構築する方法](https://casualdevelopers.com/wp-content/uploads/2015/12/cloud-3017392_1920-700x300.png)
Windowsを使うエンジニアは誰もがこう考えます。LinuxのようにWindowsを使いたいと。LinuxサーバにSSHするように、WindowsサーバにSSHしたいと。今まさにその夢が現実のものになりました。Windows版OpenSSHのリリースが発表されたのです。(現状はOpenSSH for Windows Updateのブログを読んでください。2016年にはプロダクション版のリリースが予定されています。)
ということで、今回は、Windows版OpenSSHを使用して、Windows上にSSHサーバを構築しましょう。
1. Windows上にSSHサーバを構築する。
基本的に公式のSSHサーバ構築手順通りにやってみます。
(1)Windows版OpenSSHをダウンロードする。
「OpenSSH-Win32.zip」をここからダウンロードし、適当なフォルダ(とりあえず「C:tools」にしてみましょう)に展開します。そして、展開したフォルダ(「C:toolsOpenSSH-Win32」)にPathを通します。
(2)SSHのhost keyをセットアップする。
ssh-keygenコマンドを実行して、host keyを生成します。
> cd C:toolsOpenSSH-Win32 > ssh-keygen -A C:toolsOpenSSH-Win32ssh-keygen.exe: generating new host keys: RSA DSA ECDSA ED25519 > dir -a--- 2015/XX/XX XX:XX 680 ssh_host_dsa_key -a--- 2015/XX/XX XX:XX 607 ssh_host_dsa_key.pub -a--- 2015/XX/XX XX:XX 232 ssh_host_ecdsa_key -a--- 2015/XX/XX XX:XX 179 ssh_host_ecdsa_key.pub -a--- 2015/XX/XX XX:XX 418 ssh_host_ed25519_key -a--- 2015/XX/XX XX:XX 99 ssh_host_ed25519_key.pub -a--- 2015/XX/XX XX:XX 1706 ssh_host_rsa_key -a--- 2015/XX/XX XX:XX 399 ssh_host_rsa_key.pub
(3)ファイアーウォールにSSH用のポート22を開ける。
(3-1)PowerShellの場合、以下のコマンドを実行します。(PowerShell3.0以上)
PS C:Usersuser> New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -ActiolayName SSH
(3-2)普通に設定する場合、以下の手順で行います。
「コントロールパネル->Windows ファイアウォール->詳細設定」を表示します。「受信の規則」をクリックし、右側のウィンドウの「新しい規則」からウィザードを起動します。後はウィザードに従って、「ポート->TCP->特定のローカルポートに「22」と入力->接続を許可する->ネットワークの範囲を選択->名前「SSH」(任意)を付けて完了です。
(4)鍵認証をセットアップする。
管理者権限でsetup-ssh-lsa.cmdを実行して、再起動します。
> setup-ssh-lsa.cmd C:Usersuser>if AMD64 == x86 (set lsadll=C:toolsOpenSSH-Win32x86ssh-lsa.dll ) C:Usersuser>if AMD64 == AMD64 (set lsadll=C:toolsOpenSSH-Win32x64ssh-lsa.dll ) C:Usersuser>copy C:toolsOpenSSH-Win32x64ssh-lsa.dll C:Windowssystem32 1 個のファイルをコピーしました。 C:Usersuser>reg add HKLMSystemCurrentControlSetControlLsa /v "Authentication Packages" /t REG_MULTI_SZ /d msv1_0ssh-lsa.dll -f この操作を正しく終了しました。 > shutdown /r /t 0
(5)WindowsサービスとしてSSHサーバを起動する
以下のコマンドでSSHデーモンをインストールして、WindowsサービスとしてSSHデーモンを起動します。
> sshd install Service installed successfully > net start sshd SSHD サービスを開始します. SSHD サービスは正常に開始されました。 > netstat -nao アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 PID TCP 0.0.0.0:22 0.0.0.0:0 LISTENING 1792 > tasklist /svc /fi "PID eq 1792" イメージ名 PID サービス ========================= ======== ============================================ sshd.exe 1792 SSHD
もし「システム エラー 1067 が発生しました。」と表示された場合は、(2)で作成したhost keyの場所を確認してみてください。「C:toolsOpenSSH-Win32」配下にあるはずです。
また、Windows起動時に自動で起動するようにするには、以下のコマンドを実行するか、「サービス」の「プロパティ」からポチポチと設定してください。
> sc qc SSHD SERVICE_NAME: SSHD ...(略)... START_TYPE : 3 DEMAND_START ...(略)... > sc config SSHD start=auto > sc qc SSHD SERVICE_NAME: SSHD ...(略)... START_TYPE : 2 AUTO_START ...(略)...
以上でSSHサーバが構築できました。
(6)(5)のSSHデーモンをアンインストールする方法
念のためのアンインストールコマンドは以下です。
> net stop sshd > sshd uninstall
2. SSHサーバにSSHしてみる。
それでは、WIndows上に構築されたSSHサーバにSSHでログインしてみましょう。
今回はクライアント側はすでにSSHコマンド実行可能であることを前提として確認します。記事にするほどのことではないので。(Windows上のSSHクライアントは、Windows版OpenSSHを使用してSSHコマンドを実行しても良いですし、PuTTYやらTera Termやらを使用しても良いです。今回は、Git for Windowsに付属しているSSHを使用します。)
> ssh user@XX.XX.XX.XX ...(略)... Using username "user". user@XX.XX.XX.XX's password: Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. user@USER-PC C:Usersuser>
確かにWindows上のSSHサーバにログインできましたね。
これで、WindowsサーバにLinuxのようにSSHすることが実現しました!やったぜ!
おまけ
最初の段階で、LinuxのようにWindowsを使いたいと思っていた人は気づいたはずです。「てか、Cygwinあるじゃん」と。
> Cygwin.bat $ ssh-host-config -y ...(自動的に特権分離のためのユーザ「sshd」が作成される)... *** Info: Host configuration finished. Have fun! $ cygrunsrv -S sshd
こんな感じでね。ぶっちゃけ、CygwinでSSHサーバを構築した方が間違いなくLinuxっぽいので、、、悲しくなりました(泣)でも、Cygwinは所詮Cygwinと言うツール上の話、Windows版OpenSSHはWindows全体の話なので、そこがそれぞれの違いであり利点ですかね。ちなみに、Windows版OpenSSHでもCygwinのOpenSSHでもインストール後のサービス名が「SSHD」で同じなので、両方インストールすると重複して怒られるので、気をつけてください。
追記
この記事が予約投稿だったため、記事が公開される前に新しいバージョン(Win32-OpenSSH:12_22_2015)がリリースされていました。しかし、安心してください。履いてます(笑)じゃなくて、全く同じ手順でSSHサーバを構築できます。
環境
OS : Windows7 64bit
Win32-OpenSSH:11_09_2015