MicrosoftがPowerShellが2016年8月にWindows、Linux、macOSで実行されるオープンソースプロジェクトになると述べたとき、PowerShell remotingに関連する興味深いしわがありました。Microsoftは、このPowerShellコアはSecure Shell(SSH)とWeb Services-Management(WS-MAN)を介したリモート処理をサポートすると述べた。 PowerShell SSHバイナリをいつでも使用できますが、発表ではSSHサポートがPowerShellの不可欠な部分であることが示されました。 これにより、同じ技術を使用してWindowsおよびLinuxシステムのリモート管理を簡単に実行できるようになりました。
- PowerShellリモート処理の短い歴史
- PowerShell CoreでSSHを導入
- OpenSSHのインストール
- OpenSSHオプション機能のインストール
- GitHubからOpenSSHをダウンロード
- OpenSSHの設定
- PowerShell SSH remotingを使用する
- SSHキーベース認証を使用する
- WS-MANまたはSSHリモート処理ですか?WS-MANまたはSSHベースのリモート処理を使用する必要がありますか? WS-MANリモート処理は、すべてのWindowsシステムで使用でき、Windows Server2012以降のサーバーバージョンでは既定で有効になっています。 WS-MAN remotingにはいくつかの問題、特にダブルホップの問題があります。 WS-MANはまた、ドメイン以外のシステムにリモートするための余分な作業も必要です。
PowerShellリモート処理の短い歴史
マイクロソフトは、Windows7およびWindows Server2008R2のPowerShellバージョン2.0でリモート処理を導入し、Windows管理者の風景を劇的に変 サーバーへのリモートデスクトップセッションを作成することはできましたが、PowerShellリモート処理により、多数のサーバーを同時に管理できました。
Windows PowerShellでのリモート処理は、分散管理タスクフォースのオープン標準であるWS-MANに基づいています。 しかし、WS-MANベースのリモート処理はWindows向けであるため、Linuxシステムを管理するために別の技術、通常はSSHを使用する必要がありました。
PowerShell CoreでSSHを導入
SSHは、セキュリティで保護されていない可能性のあるネットワーク上でシステムを管理するためのプロト SSHはクライアントサーバーモードで動作し、Linux環境でのリモート管理のデファクトスタンダードです。
PowerShell Coreは、オープンソースライセンスの下でリリースされたSSH1.2.12からのフォークであるOpenSSHを使用しています。 OpenSSHはおそらく最も人気のあるSSH実装です。
WS-MAN remotingを使用するために必要なコードは、Windowsオペレーティングシステムの一部としてインストールされます。 OpenSSHを手動でインストールする必要があります。
OpenSSHのインストール
私たちは、ウィザードを使用してWindowsにソフトウェアをインストールすることに慣れてきましたが、OpenSSHのインストールには、より多くの背景情報と管理者からのより多くの作業が必要です。 手動による介入がなければ、多くの問題が発生する可能性があります。Windows上のOpenSSHのインストールプロセスは時間の経過とともに改善されましたが、それでもそれほど簡単ではありません。 設定ファイルでの作業は、多くのことが望まれています。PowerShell SSHをインストールするには、次の2つのオプションがあります。
:Windows10 1809、Windows Server1809、Windows Server2019以降では、オプション機能としてOpenSSHを使用できます。
OpenSSHをインストールする前に、システムに最新のパッチがあることを確認してください。
OpenSSHオプション機能のインストール
PowerShellを使用してOpenSSHオプション機能をインストールできます。 まず、次のコマンドを使用してシステムを確認します:
Get-WindowsCapability -Online | where Name -like '*SSH*'
図1は、OpenSSHクライアントソフトウェアがプリインストールされていることを示しています。
PowerShell Core用のWindowsCompatibilityモジュールをダウンロードしない限り、インストールにはWindows PowerShellを使用する必要があります。 その後、Windows PowerShellから展開イメージのサービスと管理モジュールをインポートし、PowerShell Coreでコマンドを実行できます。P>サーバー機能をインストールします。
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Path :
Online : True
RestartNeeded : False
SSHファイルは、サーバー機能にインストールされます。
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Path :
Online : True
RestartNeeded : False
C:\Windows\System32\OpenSSH フォルダ。
GitHubからOpenSSHをダウンロード
まず、GitHubから最新バージョンをダウンロードします。 インストール手順の最新バージョンは、このリンクにあります。ダウンロードが完了したら、zipファイルを解凍します。
ダウンロードが完了したら、zipファイルを解凍します。
:\Program Files\OpenSSHフォルダ。 場所を次の場所に変更しますC:\Program SshサービスをインストールするためのFiles\OpenSSH:
.\install-sshd.ps1
SetServiceObjectSecurity SUCCESS
ChangeServiceConfig2 SUCCESS
ChangeServiceConfig2 SUCCESS
OpenSSHの設定
OpenSSHのインストール後、いくつかの追加の設定手順を実行します。OpenSSHフォルダがシステムパス環境変数に含まれていることを確認します。
- C:\Windows\System32\OpenSSH\Windowsオプション機能としてインストールされている場合
- C:\Program Files\OpenSSH\OpenSSHダウンロードを介してインストールされている場合
二つのサービスを自動的に開始するように設定します:オプション機能を使用してOpenSSHをインストールした場合、windowsはポート22を介したSSHの受信アクセスを許可する新しいファイアウォールルールを作成します。 ダウンロードからOpenSSHをインストールした場合は、次のコマンドでファイアウォールルールを作成します。
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' `
-Enabled True -Direction Inbound -Protocol TCP `
-Action Allow -LocalPort 22
sshdサービスを開始してSSHキーを生成します。
Start-Service sshd
SSHキーと設定ファイルは、次のようになります。
Start-Service sshd
SSHキーと設定ファイルは、次のようになります。
Start-Service sshd
C:\ProgramData\sshこれは隠しフォルダです。 SSHで使用されるデフォルトのシェルは、Windowsコマンドシェルです。 これはPowerShellに変更する必要があります:これで、SSH経由でシステムに接続すると、PowerShell Coreが起動し、デフォルトのシェルになります。 必要に応じて、既定のシェルWindows PowerShellを作成することもできます。
WindowsのOpenSSHにバグがあります。 PowerShell Core実行可能ファイルへのパスなど、スペースのあるパスでは機能しません! 回避策は、OpenSSHが使用できるパスを作成するシンボリックリンクを作成することです。
New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'
sshd_configファイルで、次の行をコメント解除します。
PubkeyAuthentication yes
PasswordAuthentication yes
他のサブシステム行の前にこの行を追加します:これはOpenSSHにPowerShellコアを実行するように指示します。
次の行をコメントアウトします。
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
sshd_configファイルへの変更を保存した後、サービスを再起動します。
Restart-Service sshd
Start-Service ssh-agent
設定ファイルを変更した後、sshdサービスを再起動する必要があります。
PowerShell SSH remotingを使用する
SSH経由でremotingを使用することは、WS-MAN経由でremotingと非常によく似ています。 Invoke-Commandを使用してリモートシステムに直接アクセスできます:p>
Invoke-Command -HostName W19DC01 -ScriptBlock {Get-Process}
richard@MANTICORE@w19dc01's password:
パスワードのプロンプトが表示されますが、入力しても表示されません。SSH経由でリモートシステムに接続したのが初めての場合は、次のようなメッセージが表示されます。
The authenticity of host 'servername (10.00.00.001)' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?
yesと入力してEnterキーを押します。リモート処理セッションを作成できます。
$sshs = New-PSSession -HostName W19FS01
richard@MANTICORE@w19fs01's password:
それを使用します。
Invoke-Command -Session $sshs -ScriptBlock {$env:COMPUTERNAME}
W19FS01
Ws-MANセッションと同じ方法でEnter-PSSessionを使用してOpenSSHリモート処理セッシ 既存のセッションを入力するか、Enter-PSSessionのHostNameパラメータを使用して対話型セッションを作成できます。SSHベースのセッションを切断することはできません。図2に示すように、WS-MANセッションとSSHセッションを使用して複数のコンピューターを管理できます。
セッション情報には、それぞれ異なるトランスポートメカニズムWS-MANとSSHと、各セッションで使用されているエンドポイントが表示されます。
図2をよく見ると、システムがSSHキーベースの認証で設定されているため、SSHセッションでパスワードのプロンプトが表示されな
SSHキーベース認証を使用する
昇格されたPowerShellセッションを開きます。 に場所を変更します。ユーザーエリアのsshフォルダ:
Set-Location -Path ~\.ssh
キーペアを生成します:
ssh-keygen -t ed25519
キーファイルをローカルマシンのSSH-agentに追加します:秘密鍵をSSH-agentに追加したら、秘密鍵を安全な場所にバックアップし、ローカルマシンから鍵を削除します。id_ed25519をコピーします。
pubファイルに。リモートサーバー上の一致するユーザーアカウントのsshフォルダ。 必要に応じて、このようなアカウントを作成できます。
$pwd = Read-Host -Prompt 'Password' -AsSecureString
Password: ********
New-LocalUser -Name Richard -Password $pwd -PasswordNeverExpires
Add-LocalGroupMember -Group Administrators -Member Richard
リモートマシンで、キーファイルの内容をauthorized_keysファイルにコピーします。
scp id_ed25519.pub authorized_keys
authorized_keysファイルは、権限を変更する必要があります:
- ファイルエクスプローラを開き、authorized_keysを右クリックし、Properties–Security–Advancedに移動します
- 継承を無効にするをクリックします。
- 継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換するを選択します。
- システムとユーザーアカウントを除くすべての権限を削除します。 両方とも完全な制御を有するべきである。
PowerShellコアを使用したSSHの紹介。 OpenSSHUtilsモジュールを使用してアクセス許可を設定するための参照が表示されますが、PowerShellギャラリーのバージョンにauthorized_keysファイルを使用できなくするバグがあ
リモートマシンでsshdサービスを再起動します。
図2に示すように、パスワードを使用せずにリモートマシンに接続できるようになりました。
ドメイン内のマシンからドメイン以外のマシンに接続している場合は、キーペア認証を有効にした後にUserNameパラメータを使用する必要があります:p>
$ss = New-PSSession -HostName W19ND01 -UserName Richard
あなたのドメインのユーザー名と一致するように、リモートマシン上のユーザー名が必要です。 パスワードの入力を求められることはありません。/p>
WS-MANまたはSSHリモート処理ですか?WS-MANまたはSSHベースのリモート処理を使用する必要がありますか? WS-MANリモート処理は、すべてのWindowsシステムで使用でき、Windows Server2012以降のサーバーバージョンでは既定で有効になっています。 WS-MAN remotingにはいくつかの問題、特にダブルホップの問題があります。 WS-MANはまた、ドメイン以外のシステムにリモートするための余分な作業も必要です。
SSHリモート処理はPowerShell Coreでのみ使用でき、Windows PowerShellはWS-MANリモート処理に制限されています。 SSHリモート処理のインストールと設定には、かなりの作業が必要です。 ドキュメントは、それが必要とするほど良くありません。 SSHリモート処理の利点は、SSHがリモートアクセスの標準であるドメイン以外のマシンやWindows以外のシステムに簡単にアクセスできることです。