SSH 経由の PowerShell リモート処理PowerShell remoting over SSH

概要Overview

PowerShell リモート処理では通常、接続交渉とデータ転送に WinRM が使用されます。PowerShell remoting normally uses WinRM for connection negotiation and data transport. SSH が Linux および Windows のプラットフォームで利用可能になり、実際のマルチプラットフォームの PowerShell リモート処理を実行できます。SSH is now available for Linux and Windows platforms and allows true multiplatform PowerShell remoting.

WinRM は PowerShell リモート処理セッションに堅牢なホスティング モデルを提供します。WinRM provides a robust hosting model for PowerShell remote sessions. SSH ベースのリモート処理では現在、リモート エンドポイント構成および JEA (Just Enough Administration) はサポートされていません。SSH-based remoting doesn't currently support remote endpoint configuration and Just Enough Administration (JEA).

SSH リモート処理では、Windows コンピューターと Linux コンピューターの間で基本的な PowerShell セッションをリモート処理できます。SSH remoting lets you do basic PowerShell session remoting between Windows and Linux computers. SSH リモート処理で、SSH サブシステムとしてターゲット コンピューター上に PowerShell ホスティング プロセスを作成します。SSH remoting creates a PowerShell host process on the target computer as an SSH subsystem. 最終的には、エンドポイント構成と JEA をサポートするために、WinRM とほぼ同じ一般的なホスティング モデルが実装される予定です。Eventually we'll implement a general hosting model, similar to WinRM, to support endpoint configuration and JEA.

現在、New-PSSessionEnter-PSSession、および Invoke-Command コマンドレットには、この新しいリモート処理接続をサポートする新しいパラメーター セットがあります。The New-PSSession, Enter-PSSession, and Invoke-Command cmdlets now have a new parameter set to support this new remoting connection.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

リモート セッションを作成するには、 HostName パラメーターでターゲット コンピューターを指定し、 UserName でユーザー名を指定します。To create a remote session, you specify the target computer with the HostName parameter and provide the user name with UserName . コマンドレットを対話的に実行する場合は、パスワードの入力を求められます。When running the cmdlets interactively, you're prompted for a password. また、 KeyFilePath パラメーターでプライベート キー ファイルを使用して、SSH キー認証を使用することもできます。You can also use SSH key authentication using a private key file with the KeyFilePath parameter. SSH 認証用のキーの作成は、プラットフォームによって異なります。Creating keys for SSH authentication varies by platform.

一般的なセットアップ情報General setup information

PowerShell 6 以降と SSH がすべてのコンピューターにインストールされている必要があります。PowerShell 6 or higher, and SSH must be installed on all computers. コンピューター間でリモート処理を行うには、SSH クライアント (ssh.exe) とサーバー (sshd.exe) の両方をインストールします。Install both the SSH client (ssh.exe) and server (sshd.exe) so that you can remote to and from the computers. OpenSSH for Windows が Windows 10 ビルド 1809 と Windows Server 2019 で利用できるようになりました。OpenSSH for Windows is now available in Windows 10 build 1809 and Windows Server 2019. 詳細については、OpenSSH で Windows を管理する方法に関するページを参照してください。For more information, see Manage Windows with OpenSSH. Linux の場合、お使いのプラットフォームに適した SSH (sshd サーバーを含む) をインストールします。For Linux, install SSH, including sshd server, that's appropriate for your platform. また、SSH リモート処理の機能を取得するために、GitHub から PowerShell をインストールする必要があります。You also need to install PowerShell from GitHub to get the SSH remoting feature. SSH サーバーは、リモート コンピューター上で PowerShell プロセスをホストする SSH サブシステムを作成するように構成される必要があります。The SSH server must be configured to create an SSH subsystem to host a PowerShell process on the remote computer. また、 パスワードキーベース の認証を有効にする必要があります。And, you must enable password or key-based authentication.

Windows コンピューターでの設定Set up on a Windows computer

  1. 最新バージョンの PowerShell をインストールします。Install the latest version of PowerShell. 詳細については、Windows への PowerShell Core のインストールに関するページを参照してください。For more information, see Installing PowerShell Core on Windows.

    New-PSSession パラメーター セットをリストアップすることで、PowerShell で SSH リモート処理がサポートされていることを確認できます。You can confirm that PowerShell has SSH remoting support by listing the New-PSSession parameter sets. SSH で始まるパラメーター セット名があることに気付くでしょう。You'll notice there are parameter set names that begin with SSH . そのパラメーター セットに SSH パラメーターが含まれています。Those parameter sets include SSH parameters.

    (Get-Command New-PSSession).ParameterSets.Name
    
    Name
    ----
    SSHHost
    SSHHostHashParam
    
  2. 最新の Win32 OpenSSH をインストールします。Install the latest Win32 OpenSSH. インストール手順については、OpenSSH の概要ページを参照してください。For installation instructions, see Getting started with OpenSSH.

    注意

    PowerShell を OpenSSH の既定のシェルとして設定する場合、Windows で OpenSSH を構成する方法に関するページを参照してください。If you want to set PowerShell as the default shell for OpenSSH, see Configuring Windows for OpenSSH.

  3. $env:ProgramData\ssh にある sshd_config ファイルを編集します。Edit the sshd_config file located at $env:ProgramData\ssh.

    パスワード認証が有効になっていることを確認します。Make sure password authentication is enabled:

    PasswordAuthentication yes
    

    リモート コンピューターで PowerShell プロセスをホストする SSH サブシステムを作成します。Create the SSH subsystem that hosts a PowerShell process on the remote computer:

    Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
    

    注意

    PowerShell 実行可能ファイルの既定の場所は c:/progra~1/powershell/7/pwsh.exe です。The default location of the PowerShell executable is c:/progra~1/powershell/7/pwsh.exe. この場所は、PowerShell のインストール方法によって異なります。The location can vary depending on how you installed PowerShell.

    スペースを含むファイル パスには、8.3 の短い名前を使用する必要があります。You must use the 8.3 short name for any file paths that contain spaces. OpenSSH for Windows にバグがあり、サブシステムの実行可能ファイルのパスでスペースが機能しません。There's a bug in OpenSSH for Windows that prevents spaces from working in subsystem executable paths. 詳細については、こちらの GitHub の問題のページを参照してください。For more information, see this GitHub issue.

    通常、Progra~1 が、Windows の Program Files フォルダーに対する 8.3 の短い名前です。The 8.3 short name for the Program Files folder in Windows is usually Progra~1. しかし、次のコマンドを使用して確認することができます。However, you can use the following command to make sure:

    Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' |
      Select-Object EightDotThreeFileName
    
    EightDotThreeFileName
    ---------------------
    c:\progra~1
    

    必要であれば、キー認証を有効にします。Optionally, enable key authentication:

    PubkeyAuthentication yes
    

    詳細については、OpenSSH キーの管理方法に関するページを参照してください。For more information, see Managing OpenSSH Keys.

  4. sshd サービスを再起動します。Restart the sshd service.

    Restart-Service sshd
    
  5. OpenSSH がインストールされているパスをパス環境変数に追加します。Add the path where OpenSSH is installed to your Path environment variable. たとえば、「 C:\Program Files\OpenSSH\ 」のように入力します。For example, C:\Program Files\OpenSSH\. この項目によって、ssh.exe の場所が認識されます。This entry allows for the ssh.exe to be found.

Ubuntu 16.04 Linux コンピューターでの設定Set up on an Ubuntu 16.04 Linux computer

  1. PowerShell の最新バージョンをインストールします。「Linux への PowerShell Core のインストール」を参照してください。Install the latest version of PowerShell, see Installing PowerShell Core on Linux.

  2. Ubuntu OpenSSH Server をインストールします。Install Ubuntu OpenSSH Server.

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. /etc/sshsshd_config ファイルを編集します。Edit the sshd_config file at location /etc/ssh.

    パスワード認証が有効になっていることを確認します。Make sure password authentication is enabled:

    PasswordAuthentication yes
    

    必要であれば、キー認証を有効にします。Optionally, enable key authentication:

    PubkeyAuthentication yes
    

    Ubuntu での SSH キーの作成の詳細については、ssh-keygen のマニュアル ページを参照してください。For more information about creating SSH keys on Ubuntu, see the manpage for ssh-keygen.

    PowerShell サブシステム エントリを追加します。Add a PowerShell subsystem entry:

    Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
    

    注意

    PowerShell 実行可能ファイルの既定の場所は /usr/bin/pwsh です。The default location of the PowerShell executable is /usr/bin/pwsh. この場所は、PowerShell のインストール方法によって異なります。The location can vary depending on how you installed PowerShell.

    必要であれば、キー認証を有効にします。Optionally, enable key authentication:

    PubkeyAuthentication yes
    
  4. ssh サービスを再起動します。Restart the ssh service.

    sudo service ssh restart
    

macOS コンピューターでの設定Set up on a macOS computer

  1. 最新バージョンの PowerShell をインストールします。Install the latest version of PowerShell. 詳細については、macOS への PowerShell Core のインストールに関するページを参照してください。For more information, Installing PowerShell Core on macOS.

    次の手順で SSH リモート処理が有効になっていることを確認しますMake sure SSH Remoting is enabled by following these steps:

    1. System Preferencesを開きます。Open System Preferences.
    2. Sharing をクリックします。Click on Sharing.
    3. Remote Login にオンにして Remote Login: On を設定します。Check Remote Login to set Remote Login: On.
    4. 適切なユーザーにアクセスを許可します。Allow access to the appropriate users.
  2. /private/etc/ssh/sshd_configsshd_config ファイルを編集します。Edit the sshd_config file at location /private/etc/ssh/sshd_config.

    nano などのテキスト エディターを使用します。Use a text editor such as nano :

    sudo nano /private/etc/ssh/sshd_config
    

    パスワード認証が有効になっていることを確認します。Make sure password authentication is enabled:

    PasswordAuthentication yes
    

    PowerShell サブシステム エントリを追加します。Add a PowerShell subsystem entry:

    Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogo
    

    注意

    PowerShell 実行可能ファイルの既定の場所は /usr/local/bin/pwsh です。The default location of the PowerShell executable is /usr/local/bin/pwsh. この場所は、PowerShell のインストール方法によって異なります。The location can vary depending on how you installed PowerShell.

    必要であれば、キー認証を有効にします。Optionally, enable key authentication:

    PubkeyAuthentication yes
    
  3. sshd サービスを再起動します。Restart the sshd service.

    sudo launchctl stop com.openssh.sshd
    sudo launchctl start com.openssh.sshd
    

認証Authentication

SSH を使用する PowerShell リモート処理では、SSH クライアントと SSH サービスの間の認証交換に依存し、認証スキーム自体は何も実装されません。PowerShell remoting over SSH relies on the authentication exchange between the SSH client and SSH service and doesn't implement any authentication schemes itself. 結果として、多要素認証などの構成されている認証スキームはすべて SSH によって処理され、PowerShell からは独立します。The result is that any configured authentication schemes including multi-factor authentication are handled by SSH and independent of PowerShell. たとえば、セキュリティ強化のため、公開キー認証と 1 回限りのパスワードを要求するように、SSH サービスを構成できます。For example, you can configure the SSH service to require public key authentication and a one-time password for added security. 多要素認証の構成については、このドキュメントでは説明されていません。Configuration of multi-factor authentication is outside the scope of this documentation. 多要素認証を正しく構成し、PowerShell リモート処理での使用を試みる前に PowerShell の外部での動作を検証する方法については、SSH のドキュメントをご覧ください。Refer to documentation for SSH on how to correctly configure multi-factor authentication and validate it works outside of PowerShell before attempting to use it with PowerShell remoting.

注意

ユーザーは、リモート セッションで同じ特権を保持します。Users retain the same privileges in remote sessions. つまり、管理者は管理者特権シェルにアクセスできますが、通常のユーザーはアクセスできません。Meaning, Administrators have access to an elevated shell, and normal users will not.

PowerShell リモート処理の例PowerShell remoting example

リモート処理をテストする最も簡単な方法は、1 台のコンピューターでリモート処理を試行することです。The easiest way to test remoting is to try it on a single computer. 以下の例では、同じ Linux コンピューターに戻るリモート セッションを作成します。In this example, we create a remote session back to the same Linux computer. PowerShell コマンドレットを対話的に使用しているので、SSH からホスト コンピューターの確認を求めるプロンプトと、パスワードを求めるプロンプトが表示されています。We're using PowerShell cmdlets interactively so we see prompts from SSH asking to verify the host computer and prompting for a password. Windows コンピューター上で同じ操作を行って、リモート処理の動作を確実にすることができます。You can do the same thing on a Windows computer to ensure remoting is working. その後、ホスト名を変更して、コンピューター間をリモート接続します。Then, remote between computers by changing the host name.

# Linux to Linux
#
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' cannot be established.
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y.
Are you sure you want to continue connecting (yes/no)?
TestUser@UbuntuVM1s password:
$session
 Id Name   ComputerName    ComputerType    State    ConfigurationName     Availability
 -- ----   ------------    ------------    -----    -----------------     ------------
  1 SSH1   UbuntuVM1       RemoteMachine   Opened   DefaultShell             Available
Enter-PSSession $session
[UbuntuVM1]: PS /home/TestUser> uname -a
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~16.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[UbuntuVM1]: PS /home/TestUser> Exit-PSSession
Invoke-Command $session -ScriptBlock { Get-Process powershell }
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                    PSComputerName
-------  ------    -----      -----     ------     --  -- -----------                    --------------
      0       0        0         19       3.23  10635 635 powershell                     UbuntuVM1
      0       0        0         21       4.92  11033 017 powershell                     UbuntuVM1
      0       0        0         20       3.07  11076 076 powershell                     UbuntuVM1
#
# Linux to Windows
#
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
#
# Windows to Windows
#
C:\Users\PSUser\Documents>pwsh.exe
PowerShell
Copyright (c) Microsoft Corporation. All rights reserved.
$session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established.
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts.
PSRemoteUser@WinVM2's password:
$session
 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability
 -- ----            ------------    ------------    -----         -----------------     ------------
  1 SSH1            WinVM2          RemoteMachine   Opened        DefaultShell             Available
Enter-PSSession -Session $session
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable

Name                           Value
----                           -----
PSEdition                      Core
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
SerializationVersion           1.1.0.1
BuildVersion                   3.0.0.0
CLRVersion
PSVersion                      6.0.0-alpha
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
GitCommitId                    v6.0.0-alpha.17


[WinVM2]: PS C:\Users\PSRemoteUser\Documents>

制限事項Limitations

  • sudo コマンドは、Linux コンピューターへのリモート セッションでは機能しません。The sudo command doesn't work in a remote session to a Linux computer.

  • SSH 経由の PSRemoting は、プロファイルをサポートしていないため、$PROFILE へのアクセス権がありません。PSRemoting over SSH does not support Profiles and does not have access to $PROFILE. セッションでは、完全なファイルパスが含まれるプロファイルをドット ソースで実行することで、プロファイルを読み込むことができます。Once in a session, you can load a profile by dot sourcing the profile with the full filepath. これは、SSH プロファイルには関連していません。This is not related to SSH profiles. PowerShell を既定のシェルとして使用するように SSH サーバーを構成して、SSH を使用してプロファイルを読み込むことはできます。You can configure the SSH server to use PowerShell as the default shell and to load a profile through SSH. 詳細については、SSH のドキュメントを参照してください。See the SSH documentation for more information.

  • PowerShell 7.1 より前では、SSH 経由のリモート処理は、次ホップのリモート セッションをサポートしていませんでした。Prior to PowerShell 7.1, remoting over SSH did not support second-hop remote sessions. この機能は、WinRM を使用したセッションに限定されていました。This capability was limited to sessions using WinRM. PowerShell 7.1 を使用すると、任意の対話型リモート セッション内で Enter-PSSessionEnter-PSHostProcess が機能します。PowerShell 7.1 allows Enter-PSSession and Enter-PSHostProcess to work from within any interactive remote session.

関連項目See also

Linux に PowerShell Core をインストールするInstalling PowerShell Core on Linux

macOS に PowerShell Core をインストールするInstalling PowerShell Core on macOS

Windows に PowerShell Core をインストールするInstalling PowerShell Core on Windows

OpenSSH で Windows を管理するManage Windows with OpenSSH

OpenSSH キーの管理Managing OpenSSH Keys

Ubuntu SSHUbuntu SSH