かつて、PowerShell Remotingを使用してWindows PowerShellで接続できるコンピュータの種類に制限がありました。WsManプロバイダのみがサポートされていたため、Linuxを実行しているコンピュータに接続するチャンスはありませんでした。しかし、2015年になると、MicrosoftはWindowsでSSHのサポートを導入し、多くのポテンシャルをもたらし、SSHとPowerShellを一緒に使用することができるようになりました。
この記事では、WindowsのSSHクライアントの設定方法と、SSHとPowerShell Remotingを活用する方法について詳しく見ていきます。
このSSHとPowerShellの記事は、#PS7Nowブログシリーズの一部です。この記事の一番下にある他の寄稿者もチェックしてください。
開始する前に
この記事は、チュートリアルとなっています。一緒に進める場合は、以下の前提条件を満たしていることを確認してください。
- Windows 10 – すべての例はWindows 10 Build 1903を使用します。例はリモートのWindows Serverと同じドメインに存在します。
- Windows 10にインストールされているPowerShell v6+ – すべての例はPowerShell 7 RC2を使用します。
- A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
- リモートサーバーで利用可能なTCPポート22
SSHクライアント(Windows 10)のセットアップ
PowerShellコンソールを開く前に、Windows 10がリモートSSHサーバーに接続できるようにSSHとPowerShellを連携させるためのいくつかの一度だけのタスクを実行する必要があります。
PATH環境変数にOpenSSHフォルダを追加します。
OpenSSHはWindows 10にプリインストールされていますが、PowerShellリモーティングと連携するためには少し手助けが必要です。たとえば、既にEnter-PSSession
を使用してリモートSSHシステムに接続しようとした場合、以下のエラーに遭遇した場合は、PATH 環境変数内のOpenSSH実行可能ファイル(ssh.exe)へのパスが正しいことを確認する必要があります。
PATH環境変数にOpenSSHフォルダのパスを追加するには、Startボタンをクリックし、高度なシステム設定を検索して、以下のように表示される高度なシステム設定をクリックします。

システムのプロパティウィンドウが表示されたら、環境変数ボタンをクリックします。

環境変数ウィンドウで、システム環境変数の下で、Pathを選択し、編集をクリックします。

環境変数の編集ウィンドウで、新規をクリックし、ssh.exeの実行ファイルがあるパスを入力します。このチュートリアルでは、パスはC:\Program Files\OpenSSHです。入力したら、新しい値を保存するためにOKを2回クリックします。

SSHのサブシステムの指定
リモートのWindows ServerにSSH経由で接続する場合、PowerShellが呼び出すSSHサブシステムを指定する必要があります。サブシステムを指定しない場合、次のエラーが発生します:
Enter-PSSession : The background process reported an error with the following message: The SSH client session has ended with error message: subsystem request failed on channel 0.
Windows Serverマシンに接続しない場合、これらの手順は不要です。
リモートのWindows Serverで、C:\ProgramData\ssh\ssh_configファイルを開きます。 no subsystemsのデフォルトをオーバーライドセクションに進み、ssh_configファイルの下にスクロールします。 セクションは以下のスクリーンショットのようになります。

既存のSubsystem行の下に、以下の行を使用してPowerShellのサブシステムを追加します。
これで、ssh_configファイルを保存し、リモートのWindowsサーバー上でsshdWindowsサービスを再起動します。
サービスが再起動したら、SSHとPowerShell経由で接続できるようになります。
PowerShellとSSHを使用して接続する
設定が完了したので、PowerShellリモーティングをテストしてみましょう。
まず、Enter-PSSession
コマンドレットを使用して対話型セッションに入ることを試みます。通常とは異なり、ComputerName
パラメータではなく、HostName
パラメータを使用してリモートコンピュータを指定します。
デフォルトでは、PowerShellリモーティングはまだWsManを使用しています。デフォルトをオーバーライドするには、SSHTransport
パラメータを使用してSSHとPowerShellを介して接続することを示します。
ユーザー名とパスワードで初めて接続しようとすると、SSHの秘密鍵を作成する必要があります。以下のようにプロンプトが表示されるので、’y’を入力して受け入れます。

次に、現在ログインしているユーザーのパスワードを入力するように求められます。
この例では、Windows 10クライアントとWindows Server SSHサーバーが同じActive Directoryドメインにあります。デフォルトでは、PowerShellリモート操作はログオンしているユーザーで認証を試みます。異なるユーザー名とパスワードを指定するには、
Credential
パラメータを使用することもできます。
パスワードを入力した後、おなじみのPowerShellリモート操作プロンプトに移動します。

今度はexit
でセッションを終了し、New-PSSession
を試してみてください。前と同じHostName
とSSHTransport
パラメータを使用していますが、Transport
はSSH
と表示されます。
SSHTransport
パラメータを使用せずに、ComputerName
パラメータを使用して依然としてWsManを転送プロトコルとして使用することもできます。
SSHにはユーザー名とパスワードの使用が必須ではありません。代わりに、秘密鍵ファイルを使用し、
KeyFilePath
パラメータで場所を指定することもできます。

Get-PSSession | Remove-PSSession
を使用して開いているセッションをきちんとクリーンアップするのを忘れないでください!
要約
これで、Windows 10およびWindows Serverを使用してPowerShellリモート操作でSSHを使用する方法を知ることができるはずです。構成が完了したら、転送プロトコルとしてWsManとSSHの唯一の違いはいくつかのパラメータです!
PowerShellとSSHについてもっと学びたい場合は、PowerShell Remoting over SSH Microsoftのドキュメント記事をチェックしてください。
#PS7Nowの貢献者
この投稿は、以下に表示される優れた貢献者によるPowerShell 7のシリーズの一部でした。彼らの投稿をチェックして、彼らのブログで彼らが何をしているのかを見てください!
Author | Blog | |
---|---|---|
Josh King | @WindosNZ | https://toastit.dev/ |
Adam Bertram | @adbertram | https://adamtheautomator.com/ |
Jonathan Medd | @jonathanmedd | |
Thomas Lee | @doctordns | https://tfl09.blogspot.com/ |
Prateek Singh | @singhprateik | https://ridicurious.com |
Dave Carroll | @thedavecarroll | https://powershell.anovelidea.org/ |
Dan Franciscus | @dan_franciscus | https://winsysblog.com/ |
Jeff Hicks | @jeffhicks | https://jdhitsolutions.com |
Josh Duffney | @joshduffney | http://duffney.io/ |
Mike Kanakos | @MikeKanakos | https://www.networkadm.in/ |
Tommy Maynard | @thetommymaynard | https://tommymaynard.com// |