PowerShell SSH接続用バッチ 「ps_ssh」

【概要】
WindosのコマンドプロンプトとPowerShellを使用して、LinuxとWindows間で対話的にSSH接続します。
Windows環境で、Tera Termなどの無い環境での利用を想定しています。
SSHの鍵接続および、パスワード接続に対応しています。
ログが自動で取得できます。
スクリプトと同じフォルダに「sshlog」フォルダが作成され、そこに格納されていきます。
終了時は「exit」コマンドで終了すると、ログの記録も自動的に終了します。

【動作環境】
下記で動作確認を行いました。
■Windows側:Windows11 Pro、Windows10 Pro
 ※PowerShellでSSHが使えるかどうかは、PowerShellにて下記を実施してご確認ください。
  「ssh」を入力してEnter→「usage: ssh」と表示
■Linux側:Ubuntu 22.04、Amazon Linux 2023

【作成手順】
1.任意の場所に、任意のフォルダ名でフォルダを作成します。
  ※フォルダ名やパスに半角スペースは入らないようにしてください。
2.テキストエディタ(メモ帳など)を開きます。
3.下記の「【start_ps_ssh.bat】」の内容をテキストに貼り付けます。
4.フォルダに「start_ps_ssh.bat」として保存します。
5.テキストエディタ(メモ帳など)を開きます。
6.下記の「【ps_ssh.ps1】」の内容をテキストに貼り付けます。
7.フォルダに「ps_ssh.ps1」として保存します。

【start_ps_ssh.bat】

cd /d %~dp0
powershell.exe -NoExit -ExecutionPolicy unrestricted "%~dp0ps_ssh.ps1"

【ps_ssh.ps1】

$SSH_IP = Read-Host "SSH IP"
$SSH_USER = Read-Host "SSH USER"
$SSH_KEY_CHECK = Read-Host "USE SSH KEY? (y/n)"
if ($SSH_KEY_CHECK -eq "y") {
  $SSH_KEY = Read-Host "SSH KEY FILE PATH (Use Password, Blank Enter)"
} else {
  $SSH_KEY = ""
}

$SSH_PS_PATH = (Convert-Path .)
$SSH_LOG_PATH = $SSH_PS_PATH + "\sshlog"
if (-not (Test-Path $SSH_PS_PATH)) {
  New-Item $SSH_LOG_PATH -ItemType Directory
}
$SSH_LOGNAME_DATE = Get-Date -Format "yyyyMMddHHmmss"
$SSH_LOGNAME = $SSH_LOGNAME_DATE + "_" + $SSH_IP + ".log"
Start-Transcript $SSH_LOG_PATH\$SSH_LOGNAME -Append

if ($SSH_KEY -eq "") {
  ssh $SSH_USER`@$SSH_IP
} else {
  ssh -i $SSH_KEY $SSH_USER`@$SSH_IP
}

【実行手順】
1.「start_ps_ssh.bat」をダブルクリックして実行します。
2.コマンドプロンプトが起動し、PowerShellスクリプトが実行されます。
3.SSH接続先のIPアドレス、ユーザー名を入力します。
4.接続方式を選択します。(SSH公開鍵認証方式またはパスワード方式)
5.接続方式に応じてSSH秘密鍵のパスまたはパスワードを入力します。
  ※中断する場合は「Ctrl+C」で中断してください。
6.「start_ps_ssh.bat」と同じフォルダに「sshlog」フォルダが作成されます。(初回のみ)
7.ログ「yyyyMMddHHmmss_XXX.XXX.XXX.XXX.log」(yyyyMMddHHmmssは日時、XXX.XXX.XXX.XXXはIPアドレス)が作成されます。
8.SSH接続が行われます。
9.SSH接続は「exit」で終了します。
10.スクリプトは「exit」で終了します。
  「sshlog」フォルダのログ「yyyyMMddHHmmss_XXX.XXX.XXX.XXX.log」に操作記録が残ります。

【その他】
・PowerShellはデフォルトのコマンド履歴ファイルが存在します。
 PowerShellコマンド「(Get-PSReadlineOption).HistorySavePath」で記録先のパスが確認可能です。
 ※スクリプト内でのコマンド内容などは記録に残らないのでご注意ください。
・「ps_ssh」は検索しやすいようにつけてみた名前です。
・SSH初回接続時にknown_hostsファイルへの登録確認されます。known_hostsファイルはデフォルトで「C:\Users\<ユーザー名>.ssh\known_hosts」に存在します。
・ログ内の自動時刻記録は、ログの開始時刻と終了時刻のみ記録されます。
 SSH接続後に、「export PS1=”\t $PS1″」コマンドを実行すると、プロンプトに時間が追加される(環境変数「PS1」に時刻表示の「\t」を加える)ので個々のコマンドにログを追加可能です。SSH切断後はプロンプトは元に戻ります。