Windows PowerShellでSSHを使う

Atomエディタで外部ターミナルを立ち上げたところ”Windwos PowerShell”が立ち上がるようになっていたので、どうせならということでSSHを使えるようにしました。

注意

Windows10の場合、2018年4月のアップデートにより正式にSSHクライアントが搭載され、より簡単にインストールできるようになりました。

本記事で紹介しているOpenSSHのインストール方法はBeta版のものであるため、参考にしないでください。

Windows10 でのOpenSSHインストールは下記の記事をご覧ください。

なお、本記事内で紹介しているエイリアスの登録はBeta版・正式版ともに方法に変わりありません。

Windwos PowerShell向けOpenSSHのインストール

GitHubにMicrosoft公式のPowerShellレポジトリがあります。その中にOpenSSHプロジェクトがあるので、OSバージョンに合ったzipファイルをダウンロードし展開します。今回は”C:\ProgramFiles”に展開しました。

次にWindows PowerShellを管理者モードで起動します。

SSHモジュールのインストールにあたり、スクリプトの実行ポリシーGet-ExecutionPolicyコマンドで調べます。

Restricted(制限モード;実行不可)になっている場合、Set-ExectionPlicyコマンドでRemoteSigned(署名有りのみ実行可)へ変更します。

# スクリプトの実行ポリシーチェック
PS C:\WINDOWS\system32> Get-ExecutionPolicy
Restricted

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

#実行ポリシー変更を確認
PS C:\WINDOWS\system32> Get-ExecutionPolicy
RemoteSigned

続いて、先程OpenSSHファイルを展開したフォルダへ移動し、OpenSSHのインストールスクリプト「install-sshd.ps1」を実行します。実行後、一旦exitでターミナルを終了します。

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

# install-sshd.ps1 の実行
PS C:\Program Files\OpenSSH-Win64> .\install-sshd.ps1
[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
[SC] ChangeServiceConfig2 SUCCESS
sshd and ssh-agent services successfully installed

PS C:\Program Files\OpenSSH-Win64> exit

今回インストールしたssh系のコマンドをWindows PowerShell内で使えるようにするため、パスを通してやります。

Windowsボタン + Pauseによりシステムのプロパティを開き、
「システムの詳細設定」→詳細設定タブの「環境変数」→システム環境変数の一覧にある「Path」を編集で開き、「新規」でOpenSSHを展開したフォルダパスを追加します。
今回は”C:\Program Files\OpenSSH-Win64″に展開したので、ここのパスを追加します。

再び、Windows PowerShellを立ち上げ、”ssh”とだけコマンドを実行してみましょう。パスの設定が間違っていなければ、実行結果が表示されます。

PS C:\WINDOWS\system32> ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-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]]
           destination [command]

最後に、スクリプトの実行ポリシーを元の設定に戻しましょう。

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

PS C:\WINDOWS\system32> Get-ExecutionPolicy
Restricted

エイリアスの登録

この状態で、たとえば以下のようなSSHコマンドを実行すれば、Windows PowerShellからSSH接続を行います。

PS C:\WINDOWS\system32> ssh pi@192.168.0.6

とはいえ、できれば短いコマンドで接続できるようにしたいものです。Linux系ではよく使うエイリアスの手法ですが、PowerShellでもエイリアスが利用できます。

エイリアスファイルを置く場所は決まっています。Windows PowerShellを起動して、$profile コマンドを実行してみてください。

PS C:\Users\owner> $profile
C:\Users\owner\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

ここで表示されるパスがエイリアスファイルを置く場所です。初期状態ではこのフォルダとファイルは存在しないため、New-Itemコマンドにオプションを付けることで自動作成することができます。

PS C:\Users\owner> New-Item -path $profile -type file -force
    ディレクトリ: C:\Users\owner\Documents\WindowsPowerShell
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/03/01     11:48              0 Microsoft.PowerShell_profile.ps1

いま作成したファイルをエクスプローラでのぞきに行っても良いですが、notepadコマンドを使えばメモ帳で開くことができます。

PS C:\Users\owner> notepad $profile

開いたファイルにエイリアスを記述していけば良いのですが、Windows PowerShellは記述方法が独特です。次のようにfunctionで区切ってエイリアスを記述していきます。

#RaspberryPi Zero-W
function raspi-z {  
	ssh pi@192.168.0.5
}
#RaspberryPi 2
function raspi {
	ssh pi@192.168.0.6
}
#QNAP NAS
function qnap {
	ssh admin@192.168.0.10
}

記述が終わったら保存してメモ帳とWindows PowerShellを閉じます。

エイリアスで登録したコマンドを試すため、もう一度Windows PowerShellを起動します。すると以下のようなエラーが表示されると思います。

>Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
. : このシステムではスクリプトの実行が無効になっているため、
ファイル C:\Users\owner\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
を読み込むことができません。詳細については、「about_Execution_Policies」
(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ . 'C:\Users\owner\Documents\WindowsPowerShell\Microsoft.PowerShell_pr ...
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

このエラー文にあるURLを参照してもらえば分かると思いますが、前節で変更したスクリプトの実行ポリシーがRestricted(制限モード;実行不可)になっているためです。

自作のプロファイルを使用する場合はSet-ExectionPlicyコマンドでRemoteSigned(署名有りのみ実行可)へ変更しておきます。変更は管理者モードで立ち上げたWindows PowerShellで行ってください。

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

PS C:\WINDOWS\system32> Get-ExecutionPolicy
RemoteSigned

もう一度、Windows PowerShellを立ち上げると、エラーメッセージは表示されないでしょう。最後にエイリアスが有効になっているか確かめてみます。

PS C:\Users\owner> raspi
pi@192.168.0.6's password:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Feb 28 21:55:50 2018 from 192.168.0.11
pi@raspberrypi:~ $

うまくいきました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です