PowerShellでSSHを利用してみた

PowerShell 好きですか?

私はWindows生活3か月未満ですが、すでに虜です。(言い過ぎ)

OSX生活をしていた5年間、VDI環境を引っ張り出してまでPowerShellでやっていたことといったら、PowerCLIのコマンドレットを使ったり使わなかったり程度だったので、今のPowerShellはかなり機能強化されていて、知れば知るほどその深さに驚いています。

さておき。

PowerShell、便利なんですけど SSH が直接操作できないんですよね。

こちらのブログにあるように、今後Windows 10ではコマンドプロンプトでUbuntuのBashが叩けるようになるので、SSHをPowerShellで操作しようとすること自体ナンセンスになるのかもしれませんが、私の手元の物理・仮想マシンには今のところ最新のInsider preview が落ちてきていないので、しばらくの間はPowerShellで操作することになるでしょう。

 

そんな、インフラエンジニアでも気軽に使えてしかも無料という最高な武器であるPowerShellのコマンドレット拡張のモジュールがGitHubで公開されているのをご存知でしょうか?(私は知りませんでした。)

今日はそのなかのひとつ、OpenSSHをPowerShellに追加するモジュールを使ってみました。

 

1. GitHub から環境にあわせたモジュールをダウンロードします。(Wikiによると64-bit はCygwinが必要らしいので32-bitにしました。)

image

 

2.ダウンロードしたZipファイルを解凍し、”C:\Program Files\OpenSSH-Win32”に置きます。

 

3.PowerShell を管理者モードで起動します。(検索窓でPowerShell を探して、Ctrl + Shift + Enterで管理者モードになります。)

imagePS C:\Tools\OpenSSH-Win64> cd 'C:\Program Files\OpenSSH-Win32'

 

#SSHのホストキーを生成します(公開鍵認証方式で接続する場合のみ)

 PS C:\Program Files\OpenSSH-Win32> .\ssh-keygen.exe -A
 C:\Program Files\OpenSSH-Win32\ssh-keygen.exe: generating new host keys: RSA DSA ECDSA ED25519
 

#Windows Firewall を設定します。

 PS C:\Program Files\OpenSSH-Win32> New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
 Name                  : {d4ad1913-e75e-4474-aa83-0fc94c25669a}
 DisplayName           : SSH
 Description           :
 DisplayGroup          :
 Group                 :
 Enabled               : True
 Profile               : Any
 Platform              : {}
 Direction             : Inbound
 Action                : Allow
 EdgeTraversalPolicy   : Block
 LooseSourceMapping    : False
 LocalOnlyMapping      : False
 Owner                 :
 PrimaryStatus         : OK
 Status                : 規則は、ストアから正常に解析されました。 (65536)
 EnforcementStatus     : NotApplicable
 PolicyStoreSource     : PersistentStore
 PolicyStoreSourceType : Local

image

#一時的にPowerShellの実行ポリシーをゆるめて

 PS C:\Program Files\OpenSSH-Win32> Set-ExecutionPolicy Unrestricted

#インストール用のスクリプトを実行します。

 PS C:\Program Files\OpenSSH-Win32> .\install-sshlsa.ps1
 PS C:\Program Files\OpenSSH-Win32> .\install-sshd.ps1
 sshd successfully installed

#一時的にPowerShellの実行ポリシーを戻します。

 PS C:\Program Files\OpenSSH-Win32> Set-ExecutionPolicy RemoteSigned

 

4.そのままでは動かないこともあったので、とどめに環境変数を設定します。

 # 永続的にパスを追加する(Windows環境変数を書き換える)
 $Env:Path += ";C:\Program Files\OpenSSH-Win32"
 [Environment]::SetEnvironmentVariable('PATH', $Env:Path, 'Machine')
 

5.テストOSXにSSHサーバーを立てて接続テストを行ってみました。

>ssh ユーザー名@接続先ホストのIPアドレス

初めて接続するサーバーの場合確認を求められるので、Yesと入力します。

その後パスワードを入力。

下記の例ではdir コマンドと ls コマンドを実行してローカルかどうかを確認しています。

image

 

参考リンクhttps://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。