SSHとPowerShell:Windows SSHクライアントのセットアップ

かつて、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)へのパスが正しいことを確認する必要があります。

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

PATH環境変数にOpenSSHフォルダのパスを追加するには、Startボタンをクリックし、高度なシステム設定を検索して、以下のように表示される高度なシステム設定をクリックします。

Adding OpenSSH folder path

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

Environment Variables in System Properties

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

System Variables in the Environment Variables

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

Editing Environment Variable

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ファイルの下にスクロールします。 セクションは以下のスクリーンショットのようになります。

Override Default of no Subsystems

既存のSubsystem行の下に、以下の行を使用してPowerShellのサブシステムを追加します。

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

これで、ssh_configファイルを保存し、リモートのWindowsサーバー上でsshdWindowsサービスを再起動します。

Get-Service -Name sshd | Restart-Service

サービスが再起動したら、SSHとPowerShell経由で接続できるようになります。

PowerShellとSSHを使用して接続する

設定が完了したので、PowerShellリモーティングをテストしてみましょう。

まず、Enter-PSSessionコマンドレットを使用して対話型セッションに入ることを試みます。通常とは異なり、ComputerNameパラメータではなく、HostNameパラメータを使用してリモートコンピュータを指定します。

デフォルトでは、PowerShellリモーティングはまだWsManを使用しています。デフォルトをオーバーライドするには、SSHTransportパラメータを使用してSSHとPowerShellを介して接続することを示します。

ユーザー名とパスワードで初めて接続しようとすると、SSHの秘密鍵を作成する必要があります。以下のようにプロンプトが表示されるので、’y’を入力して受け入れます。

Creating SSH Private Key

次に、現在ログインしているユーザーのパスワードを入力するように求められます。

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

パスワードを入力した後、おなじみのPowerShellリモート操作プロンプトに移動します。

Powershell Remoting Prompt

今度はexitでセッションを終了し、New-PSSessionを試してみてください。前と同じHostNameSSHTransportパラメータを使用していますが、TransportSSHと表示されます。

SSHTransportパラメータを使用せずに、ComputerNameパラメータを使用して依然としてWsManを転送プロトコルとして使用することもできます。

SSHにはユーザー名とパスワードの使用が必須ではありません。代わりに、秘密鍵ファイルを使用し、KeyFilePathパラメータで場所を指定することもできます。

New PSSession Showing up SSH

Get-PSSession | Remove-PSSessionを使用して開いているセッションをきちんとクリーンアップするのを忘れないでください!

要約

これで、Windows 10およびWindows Serverを使用してPowerShellリモート操作でSSHを使用する方法を知ることができるはずです。構成が完了したら、転送プロトコルとしてWsManとSSHの唯一の違いはいくつかのパラメータです!

PowerShellとSSHについてもっと学びたい場合は、PowerShell Remoting over SSH Microsoftのドキュメント記事をチェックしてください。

#PS7Nowの貢献者

この投稿は、以下に表示される優れた貢献者によるPowerShell 7のシリーズの一部でした。彼らの投稿をチェックして、彼らのブログで彼らが何をしているのかを見てください!

Author Twitter 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//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/