2017年06月11日

Windows に OpenSSH をインストールする

Windowsには標準でSSHのサーバもクライアントも用意されていないが、
Windows版OpenSSH のプレリリース版がある。

ちょっと前に、それがリリース段階になったとニュースがでていた。

OpenSSH for Windowsリリース段階に到達 - Microsoft

Microsoftは5月1日(米国時間)、「OpenSSH Security Testing Kick Off|Windows PowerShell ...




まだ正式版ではないが、インストールしてみる。
インストール環境:Windows10 64bit






ダウンロード


ここから最新版(インストール時の最新は v0.0.15.0)をダウンロードする。

"Win32-OpenSSH" ってなっているが、64bitもある。
windows_openssh01.png
"OpenSSH-Win64.zip" をダウンロードして
"Install Win32 OpenSSH"を参考に進める。


ダウンロードしたファイルを解凍し、任意の場所に置く。

C:\Program Files\OpenSSH-Win64



パスを通しておく。
[システムの詳細設定] から、「環境変数」をクリック。
windows_openssh02.png


[システム環境変数] の "Path" を選択して、[編集] をクリック。
windows_openssh03.png


[新規] をクリックして、OpenSSHフォルダの配置先を入力。
windows_openssh04.png






SSHサーバーインストール


PowerShellを管理者権限で起動する。

OpenSSHフォルダに移動。

cd 'C:\Program Files\OpenSSH-Win64'





実行ポリシーの変更


現在の設定を確認。

Get-ExecutionPolicy

Restricted

スクリプトの実行が禁止されているので、
実行ポリシーを「制限無し(Unrestricted)」に変更。
(インストールが完了したら実行ポリシーを元の「制限あり(Restricted)」に戻します)

Set-ExecutionPolicy Unrestricted

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y




sshd と ssh-agent サービスのインストール


コマンドを実行する。

.\install-sshd.ps1

[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
[SC] ChangeServiceConfig2 SUCCESS
sshd and ssh-agent services successfully installed

"successfully installed" と表示されれば完了。



ホストキーの生成


コマンドを実行する。
(ウイルスバスターで警告が出た。自己責任で実行許可する)

.\ssh-keygen.exe -A

C:\Program Files\OpenSSH-Win64\ssh-keygen.exe: generating new host keys: RSA DSA ECDSA ED25519


.\FixHostFilePermissions.ps1 -Quiet


"FixHostFilePermissions.ps1"は、v0.0.15.0 で追加されました。
ファイルのパーミッションを修正するためのようです。
(参考:OpenSSH utility scripts to fix file permissions



Windowsファイアウォールの設定


TCPポート 22番の受信許可設定を行う。
コマンドを実行する。

New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH





追加された設定を確認してみる。
[コントロールパネル] - [Windowsファイアウォール] から、
[詳細設定] を選択する。
windows_openssh05.png


[受信の規制] を確認すると、
"SSH" の名称で規制が追加されているはず。
windows_openssh06.png

"SSH" のプロパティを確認すると、
[プロトコルおよびポート] タブで、TCPポート22番が設定されているのがわかる。
windows_openssh07.png



sshd と ssh-agent サービスの起動


コマンドを実行する。

Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic




追加された設定を確認してみる。
[コントロールパネル] - [管理ツール] から、
[サービス] をクリックし、サービスの一覧を表示させる。
windows_openssh08.png
"sshd" と "ssh-agent" のスタートアップの種類が、"自動"になっているはず。

この設定でWindowsが起動すれば、自動的に "sshd" と "ssh-agent" のサービスの起動する。


再起動させ、確認してみる。
再起動後、サービスの一覧を表示させると、
windows_openssh09.png
状態が、"実行中"となっているのがわかる。



実行ポリシーを元に戻す


Set-ExecutionPolicy Restricted

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y


設定を確認し、元に戻っていることを確認する。

Get-ExecutionPolicy

Restricted







他の端末からWindowsにsshでログイン


Tera Termを使い、ログインしてみる。
SSHサーバーとなるWindowsPCのIPアドレスとポート番号を入れ、接続する。
windows_openssh10.png

サーバーの確認と、
windows_openssh11.png

アカウント認証が行われる。
SSHサーバーとなるWindowsPCのアカウントとパスワードを入れ、[OK] をクリック。
windows_openssh12.png

認証されると、WindowsPCに接続できた。
windows_openssh13.png






SSHクライアントとして使う


パスは通してあるので
コマンドプロンプト または PowerShell で、コマンドを実行する。
(ウイルスバスターで警告が出た。自己責任で実行許可する)

ssh 接続先ユーザー名@接続先IPアドレス



接続はできたが、はっきり言って、画面はコマンドプロンプトやPowerShellのままなので、
あまり使い勝手は良いものではない。






SSHサーバーのポート番号を変更


SSHサーバーのポート番号の初期値は、22番ポートを使う。
セキュリティ向上のため、ポート番号の変更をしておく。



ポート番号を変更


PowerShellを管理者権限で起動し、OpenSSHフォルダに移動。
"sshd_config" ファイルを開く。

notepad .\sshd_config


#Port 22
↓コメントアウトを外し、22番以外に変更。
Port 50022



変更したらファイルを保存。



Windowsファイアウォールの変更


インストール時には、ポート22番で設定をした。
変更したポート番号で、ファイアウォールも変更する。

[コントロールパネル] - [Windowsファイアウォール] - [詳細設定] から、
[受信の規制] をクリック。

"SSH" を選択し、右クリックから [プロパティ] を選択し、
[プロトコルおよびポート] タブで、変更したポート番号に合わせる。
windows_openssh15.png


これで、他の端末からsshでログインするときには、
22番ではなく、変更したポート番号が有効となる。






公開鍵認証


セキュリティを高めるため、パスワード認証によるアクセスを禁止し、公開鍵認証を有効にする。



公開鍵認証を有効化


PowerShellを管理者権限で起動し、OpenSSHフォルダに移動。
"sshd_config" ファイルを開く。

notepad .\sshd_config


#PubkeyAuthentication yes
↓コメントアウトを外す。
PubkeyAuthentication yes


#PasswordAuthentication yes
↓コメントアウトを外し、"no" を設定。
PasswordAuthentication no



sshdサービスを再起動させれば、
パスワード認証が禁止になり、公開鍵認証が有効となる。



公開鍵、秘密鍵ペアの作成①


SSHクライアント側で作成し、SSHサーバーへ公開鍵を設定する。
Tera Termを使い作成する。

[設定] - [SSH鍵生成] を選択。
windows_openssh16.png


デフォルトのままでいいので、
(鍵の種類: RSA 、ビット数:2048)
[生成] をクリック。
windows_openssh17.png

生成が完了したら、鍵を保存。
[公開鍵の保存]:適当に名前(*.pub)を付けて保存する。(id_rsa.pub)
後でSSHサーバー側に渡す鍵となる。
windows_openssh18.png

[秘密鍵の保存]:適当に名前(拡張子なし)を付けて保存する。(id_rsa)
パスフレーズは空のままでも大丈夫。
SSHクライアント(Tera Term)で参照する鍵となる。
windows_openssh19.png



公開鍵をSSHサーバーに設定


作成した公開鍵をSSHサーバーにUSBメモリでも何でもいいので渡す。
SSHサーバーでの公開鍵の保存先は、

C:\Users\<ユーザー>\.ssh



新規保存の場合は、渡した公開鍵(*.pub)を
"authorized_keys" に、リネームする。
(補足)
コマンドプロンプトで処理しようと、
type .\id_rsa.pub >> authorized_keys
と実行したら、認証に失敗した。
よくみたら作成された"authorized_keys"ファイルが UTF-16 に変換されていた。
改行コードもCRLFになった。
これでは鍵ペアにならず認証されない。
なので、そのままリネームした。


既に、"authorized_keys" が存在する場合は、
テキストエディタで、"authorized_keys" と、公開鍵(*.pub) を開き、
公開鍵(*.pub)の内容を、"authorized_keys" へ貼り付ければいい。



SSHクライアントから公開鍵認証で接続


Tera Termを使い、ログインしてみる。

ホストとTCPポートを指定して接続。

SSH認証にて、
[RSA/DSA鍵を使う] を選び、作成した秘密鍵を選択する。
ユーザー名とパスフレーズを入力して、[OK] をクリック。
windows_openssh20.png

認証され、接続できた。
windows_openssh21.png




公開鍵、秘密鍵ペアの作成②


①では、クライアント側で鍵を作成した。
試しに、今度は、サーバー側で作成してみる。

SSHサーバーでの公開鍵の保存先で作成する。
PowerShellを起動(管理者権限では無い)し、.sshフォルダに移動。

cd 'C:\Users\<ユーザー>\.ssh'



鍵を作成する。Enterキーを押し、進める。
パスフレーズは空のままで大丈夫。

ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\********/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\********/.ssh/id_rsa.
Your public key has been saved in C:\Users\********/.ssh/id_rsa.pub.
....



ここで、作成された "id_rsa.pub" のプロパティを表示、
[セキュリティ]タブを見てみると、
[グループ名またはユーザー名] に、"Everyone" が含まれていた。
windows_openssh22.png

これがあると認証に失敗したので、"Everyone" を削除する。


[編集] をクリックする。
"Everyone" を選択し、[削除] をクリック。
windows_openssh23.png


あとは、公開鍵ファイル名(id_rsa.pub)を、同様に "authorized_keys" にリネームする。

秘密鍵は、今度は逆にクライアント側に渡す。
この秘密鍵を使い、SSHクライアントから公開鍵認証で接続する。






アンインストール


インストール手順同様に、
PowerShellを管理者権限で起動し、OpenSSHフォルダに移動。

実行ポリシーを変更し、スクリプトの実行を許可しておく。



sshd と ssh-agent サービスをアンインストールする


コマンドを実行。

.\uninstall-sshd.ps1

sshd successfully uninstalled
ssh-agent successfully uninstalled

"successfully uninstalled" と表示されれば完了。

実行ポリシーを元に戻しておく。



Windowsファイアウォールの削除


追加したWindowsファイアウォールも、忘れずに削除しておく。
[コントロールパネル] - [Windowsファイアウォール] - [詳細設定] から、
[受信の規制] をクリック。

"SSH" を選択し、右クリックから [削除] を実行する。
windows_openssh14.png






まとめ


Windowsには、SSHクライアントとして Tera TermPuTTY があるので、SSHクライアントのためにインストールするほどでも無いと思った。

WindowsでSSHサーバーになれるのであれば、SSH ポートフォワーディングが使えるので、
【Windows】 - 【Windows(SSHサーバー)】- 【VirtualBox(ゲストOS)】
という接続ができる。
VirtualBoxを使い動いているゲストOSへ対して、他PCからアクセスできるようになるので
VirtualBoxが入っているPC以外を使い作業していたときに、作業効率が良くなった。



VirtualBox: ホストOSからゲストOSへのアクセス
Ubuntu サーバの初期設定 ssh
Ubuntu サーバの初期設定 ssh(秘密鍵)
posted by Zorinos at 23:00
"Windows に OpenSSH をインストールする"へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

ブログランキング・にほんブログ村へ
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。