PowerShell CoreでSSH接続

PowerShell Core 6.0からリモートセッションプロトコルにSSHが利用できるようになっている。OpenSSHで接続する場合と違って、接続先ホストにPowerShell Coreが存在しており、かつ、sshdからPowerShell Coreが起動するように設定されている必要があるのだが、SSHで接続できるようになった意義は大きい。これによってmacOSやLinuxといったホストにもPowreShell Coreから接続できるようになったからだ。

PowerShell Core 6.0では次のようなコマンドレットでSSH経由の接続を実施できる。

PowerShell Core 6.0からSSH接続

Enter-PSSession -HostName ホスト名 -UserName ユーザ名

オプションの指定方法はPowerShell流になっているが、これはOpenSSHのユーザからすると馴染みのない方法だ。これがPowerShell Core 6.1では若干拡張され、次のような使い方ができるようになった。

PowerShell Core 6.1からはこのような指定が可能になった

Enter-PSSession -HostName ユーザ名@ホスト名:ポート番号

こちらの指定方法はsshコマンドの引数に指定する方法と同じだ。sshユーザとしてはこちらの方がよく馴染む。

SSHで接続するための準備

PowerShell CoreからSSH接続するためには、sshd側の設定を変更してPowerShell Coreが起動するようにしておく必要がある。

macOSおよびLinuxの場合には次のような設定をsshd_configに追加する。

sshd_config設定ファイルに追加する設定(macOS)

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

sshd_config設定ファイルに追加する設定(Linux)

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

Windowsの場合はパスに空白が含まれるので、次のようにリンクを作成してから、設定ファイルにリンクの方を指定する。

空白を含まないパスをリンクで用意

mklink /D c:\pwsh "C:\Program Files\PowerShell\6.1.0"

sshd_config設定ファイルに追加する設定(Windows)

Subsystem    powershell c:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile

これでSSH経由での接続のあとにPowerShell Coreが起動するようになる。設定を反映させるためにsshdを再起動する。

sshdの再起動(macOS)

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

sshdの再起動(Linux)

sudo service sshd restart

sshdの再起動(Windows)

Restart-Service sshd

これで準備完了だ。

PowerShell CoreからSSH接続

PowerShell Core 6.0からは次のようにSSH経由で接続できる。

PowerShell Core 6.0からSSH接続

PowerShell Core 6.1からは次のようにも接続できるようになった。

リモート接続できるようになるとPowerShellの強力な機能を使ってローカルとリモートの間でデータのやりとりが可能になる。本連載ではリモートに関してはまだ取り上げていないが、このあたりも追って紹介していこう。

SSH経由でmacOSやLinuxにログインできるようになると、俄然管理用シェルとしてのPowerShell Coreの本領が発揮できるというものだ。

参考資料