MS公式のOpenSSHモジュールを使用してWindowsデスクトップOSでssh公開鍵の作成

概要

AzureでLinuxインスタンスを建てた際にパスワード認証を避け、公開鍵認証方式にします。
その際クライアントがWindows OSの場合は、MS公式のOpenSSHモジュールを使用してキーペアを作成します。
screenshot.1484804852

MS公式のOpenSSHモジュールのインストール

MicrosoftのGithubリポジトリに公開されているので、こちらからダウンロード&インストールします。
Releases · PowerShell/Win32-OpenSSH
screenshot.1484805110

ダウンロードしたzipを任意の場所へ展開します。
screenshot.1484805608

PowerShellを管理者権限で起動します。
インストールを実行する前に Get-ExecutionPolicy でPowerShellの実行ポリシーを確認します。
Restricted になっている場合は、RemoteSigned に変更します。(外部からダウンロードしたものは署名のあるもに限り実行可)

PS C:\Windows\system32> Get-ExecutionPolicy
Restricted
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
PS C:\Windows\system32>
PS C:\Windows\system32> Get-ExecutionPolicy
RemoteSigned
PS C:\Windows\system32>

そうしたら、展開先フォルダに移動してインストールスクリプトを実行します。

PS C:\Windows\system32>
PS C:\Windows\system32> cd "C:\Program Files\OpenSSH-Win64"
PS C:\Program Files\OpenSSH-Win64>
PS C:\Program Files\OpenSSH-Win64> .\install-sshd.ps1
[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
Granting SeAssignPrimaryTokenPrivilege to NT SERVICE\SSHD   ... successful
sshd and ssh-agent services successfully installed
PS C:\Program Files\OpenSSH-Win64>

インストールすることによって、sshdssh-agent がサービス登録されます。
ここでは、特にサービスを起動する必要はありません。

PS C:\Program Files\OpenSSH-Win64> Get-Service -Name sshd
Status   Name               DisplayName                           
------   ----               -----------                           
Stopped  sshd               sshd                                  
PS C:\Program Files\OpenSSH-Win64> Get-Service -Name ssh-agent
Status   Name               DisplayName                           
------   ----               -----------                           
Stopped  ssh-agent          ssh-agent                             

次にシステム環境変数Pathに展開先フォルダパスを追加します。
「Windowsボタン + Pause」によりシステム画面を開き、
[システムの詳細設定]> [詳細設定]タブの[環境変数] > [システム環境変数]のPathを[編集]で開き、[新規]で展開先フォルダパスを追加します。
screenshot.1484807198

追加したら、PowerShellを再起動します。(管理者権限ではなく、ログインユーザでの実行でよいです)
ssh と実行して usage が出力されれば Path は通っています。

PS C:\Users\windowsuser> ssh
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
PS C:\Users\windowsuser>

sshキーペアの作成

インストールが完了したのでPowerShellから、sshキーペアを作成します。
OpenSSHですのでLinuxと同じ感じでOKです。ついでに4096bitで作成します。(デフォルトは2048bit)

PS C:\Users\windowsuser> ssh-keygen -t rsa -b 4096

保存先(とファイル)の確定。ここではデフォルトでEnter

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\windowsuser/.ssh/id_rsa):

あとはパスフレーズを2度入力

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\windowsuser/.ssh/id_rsa.
Your public key has been saved in C:\Users\windowsuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WINDOWS10\windowsuser@windows10
The key's randomart image is:
+---[RSA 4096]----+

完了するとユーザフォルダ配下の .ssh フォルダの下にキーペアが作成されます。
id_rsa が秘密鍵、id_rsa.pub が公開鍵です。

PS C:\Users\windowsuser> ls .\.ssh\
ディレクトリ: C:\Users\windowsuser\.ssh
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/01/19      10:45           3326 id_rsa
-a----       2017/01/19      10:45            758 id_rsa.pub
PS C:\Users\windowsuser>

生成された、このssh公開鍵を利用します。(下記は1行です。最後の要素はコメントですのでわかりやすいように変更可)

PS C:\Users\windowsuser> type .\.ssh\id_rsa.pub
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx WINDOWS10\windowsuser@windows10
PS C:\Users\windowsuser>

AzureのCentOSインスタンスを公開鍵認証に変更する。

では本題に戻りましてAzureのCentOSインスタンスを公開鍵認証に変更します。
もちろん新規で作成する際にも利用できますが、私はすでにインスタンスを建ててしまっていましたので、
既存のインスタンスの設定を変更します。

下の画像は、既存Azure VMを選択し、Rest Passwordから認証方法変更します。(これによってパスワード認証できなくします。)※ 画像がわかりにくいですが、 SSH public key は1行で入力されています。
screenshot.1484810018

これでsshログイン可能な状態は整いましたので、あとはご自身のお好きなsshクライアント(TeratermやPutty等)で秘密鍵を指定してログインすることが可能です。
せっかくなので、今回はPowerShellからSSHログインしてみます。(オススメはできません笑)

コマンドはLinuxと同じです。
-i で秘密鍵を指定します。(省略可、省略するとユーザディレクトリ下の.ssh\id_rsaを利用)
-p でポートを指定します。 (省略可、省略すると22番を利用)

PS C:\Users\windowsuser> ssh linuxuser@100.XXX.XXX.XXX -i .\.ssh\id_rsa -p 22
Enter passphrase for key '.\.ssh\id_rsa':
Last login: Thu Jan 19 07:20:11 2017 from ZZZ.ZZZ.ZZZ.ZZZ
[linuxuser@centos72 ~]$
[linuxuser@centos72 ~]$
[linuxuser@centos72 ~]$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[linuxuser@centos72 ~]$

これでログインできました。PowerShellからsshログインするなんて、なかなかキモ…変な感じがしますね。

運用面など

パスフレーズ入力を省略

こちらはPowershellからSSHログインする場合に限られますが、
複数の鍵を使いたい場合や、パスフレーズの入力を省略したい場合などは ssh-agent を利用します。
まず ssh-agent サービスを起動します。(GUIからの実行で構いません、PowerShellからの実行は管理者権限である必要があります。)
screenshot.1484812005

ssh-agent サービスを起動したら、鍵を登録します。

PS C:\Users\windowsuser> ssh-add .\.ssh\id_rsa
Enter passphrase for .\.ssh\id_rsa:
Identity added: .\.ssh\id_rsa (.\.ssh\id_rsa)
PS C:\Users\windowsuser>

登録された鍵を確認

PS C:\Users\windowsuser> ssh-add -l
4096 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx .\.ssh\id_rsa (RSA)
PS C:\Users\windowsuser>

これで次回からパスフレーズの入力を省略してログイン可能になりました。

PS C:\Users\windowsuser>
PS C:\Users\windowsuser> ssh linuxuser@100.XXX.XXX.XXX
Last login: Thu Jan 19 07:24:23 2017 from ZZZ.ZZZ.ZZZ.ZZZ
[linuxuser@centos72 ~]$
[linuxuser@centos72 ~]$

サーバーサイドに公開鍵の登録追加

作成したsshの秘密鍵を使い回すわけにはいきませんので、サーバーサイドにssh公開鍵の登録を追加し、sshアクセスできる人(デバイス)を増やします。
やり方はユーザのホームディレクトリ配下に .ssh というディレクトリがあります。この配下の authorized_keys というファイルに公開鍵を追加するだけです。

[linuxuser@centos72 ~]$ ll ~/.ssh/authorized_keys
-rw-r--r--. 1 linuxuser linuxuser 1450 Jan 19 07:01 /home/linuxuser/.ssh/authorized_keys
[linuxuser@centos72 ~]$
[linuxuser@centos72 ~]$ vim ~/.ssh/authorized_keys

最後に

以上でMS公式のOpenSSHモジュールを利用して、WindowsデスクトップOSからのSSHキーペア作成は完了です。コマンドもLinuxで今まで扱っていたように打てるのはありがたいところです。
ところでみなさん、WindowsデスクトップからSSHキーペアを作成するときはいったいどうやっていたのでしょう…。私は手っ取り早くLinuxにログインしていました 🙁

Be the first to comment

コメント投稿

Your email address will not be published.


*