0
0

Tera Termでセッションマネージャーを使ってEC2にログインする方法色々

Posted at

はじめに

Windowsを使って仕事しているインフラエンジニア的には当たり前なソフトとなるTera Termですが、スイッチロール先のEC2にログインするとき、Tera Termでログインするにはどうすればよいだろうと調べた結果を紹介したいと思います。

セッションマネージャーを使う際の問題

セッションマネージャーはAWSの機能となり、EC2等への接続を行う際に使用するものとなります。

EC2インスタンス等に接続する際、セキュリティグループ等でSSHポートを許可しなくても済み、SSH接続とは異なることから、キーペアのような永続鍵を管理する必要もないことから使われている方も多いと思います。

ただし、セッションマネージャーは上述の通り、AWSの機能となるため、Tera Termは対応しておらず、コマンドラインでログインする際にはAWS CLIでログインする必要があることから、Windows PCで使用する場合は、コマンドプロンプトやPowerShell、もしくは別のソフトウェア等を使用する必要があります。

じゃあ、Tera Termを使わず、他の手段を取ればいいじゃないかと考える方もおられるかと思いますが、Tera Termはマクロも使用できるため、マクロありきで運用されているところも多く、例えば新しく導入したシステムだけPowerShellで運用するというのは中々ハードルが高い問題となります。

というわけで今回はTera TermでEC2に接続するという運用は変えずにセッションマネージャーでEC2に接続し、スイッチロールを行っているアカウントのEC2にも接続する方法をまとめてみたいと思います。

Tera Termでセッションマネージャーを使ってスイッチロール先EC2にログインする方法

以下で挙げる方法以外にも色々とあると思いますが、今回は私が考えた以下3つの方法を紹介したいと思います。

前提として、操作するWindows PCにはTera Term、AWS CLI、セッションマネージャープラグインがインストールされている前提で進めるため、インストールされていない場合は以下よりインストールしておいてください。

WSLで起動した仮想マシンでSSHサーバを動作させて仮想マシン経由で接続を行う

Windows Subsystem for Linux(以下WSL)で何かしらのサーバをローカルPC内で動作させて、仮想マシン経由で接続するという方法となります。

別にWSLに限らずともローカルPC内でTera Term接続できるサーバが構築できればいいのでDockerで起動したサーバやVirtualBoxで作成したサーバ等でもOKです。

今回はWSLUbuntuでSSHサーバを動作させて接続する例を示します。

WSLは以下の記事等を参考にセットアップしておいてください。

なお、私の環境は既にWSLを大分カスタマイズしてしまっている構成のため、素の状態からの手順確認ができなかったので、うまくできない場合は他のサイトも参考にしてください。

以下私の環境で試した結果を参考として載せておきます。

WSLの仮想マシンで接続する場合の前提条件

WSLを有効化する必要があるため、各会社のポリシーにより有効化できない場合はそもそもこの手段を取れないため、別の手段を検討してください。

SSHサービスインストール

WSLUbuntuをインストールしている前提で進めます。

デフォルトだとSSHサービスはインストールされていないため、Ubuntu上から以下コマンドを実行し、SSHサービスをインストールします。

SSHサービスインストール
sudo apt-get update
sudo apt -y install ssh

再起動した際に起動するようサービスの有効化とサービス起動を行っておきます。

SSHサービスの有効化とサービス起動
sudo systemctl enable --now ssh

AWS CLIとセッションマネージャープラグインインストール

今回の構成の場合、Tera TermでローカルのUbuntuにSSH接続して、UbuntuからEC2インスタンスに接続することになるため、UbuntuAWS CLIとセッションマネージャープラグインをインストールします。

AWS CLIのインストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
セッションマネージャープラグインのインストール
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb

AWS CLIのセットアップ

Windowsホスト側で設定しているAWS CLIの設定とは共有できないため、Ubuntu側にも設定します。

AWS CLIのセットアップ
aws configure

Tera TermでのEC2インスタンスへの接続

ここまででUbuntu側の設定が一通りできたので、Tera Termで接続します。

Ubuntu側でSSHサービスを起動すると、Windows側でもSSHサービスの待受がされているはずなので、Tera Termで以下のように接続します。

項目 設定
ホスト localhost
サービス SSH
TCPポート 22
SSHバージョン SSH2
IPバージョン AUTO

接続する際、Windowsホスト側のユーザ名、パスワードで接続できるかと思いますので、入力して接続します。

項目 設定
ユーザ名 ※Windowsホスト側ユーザ名
パスフレーズ ※Windowsホスト側パスワード
認証方式 プレインパスワードを使う

Tera Termで接続できてしまえば後はセッションマネージャーのコマンドでEC2インスタンスに接続してください。

セッションマネージャーでの接続
aws ssm start-session --target [接続先EC2インスタンスID]

ローカルPCでOpenSSHサーバ機能を動作させてローカルSSHサーバ経由で接続を行う

方法としてはWSLで起動した仮想マシン経由で接続する方法と同じような接続構成となりますが、WSLの場合と異なり、標準のオプション機能の有効化で済む点がWSLよりは手軽にできるかと思います。

OpenSSHサーバ機能で接続する場合の前提条件

OS標準のオプションを利用する方法となりますが、WSLの場合と同様、会社のポリシーにより有効化できない場合は使用できませんので、別の手段を検討してください。

前提条件の確認のため、管理者権限でPowerShellを起動して以下を実行します。

ビルトインAdministratorグループのメンバーであるかの確認
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

結果がTrueで無い場合は別の手段をご検討ください。

OpenSSHクライアントとサーバの有効化

今回はWindows11で設定を行っていきます。

Windows10等の場合は、先程の公式ページから確認してみてください。

OpenSSHはWindowsのオプション機能から有効化できるので、「設定」から「システム」→「オプション機能」を選択します。

Monosnap_20240727_111439.png

追加された機能」に「OpenSSHサーバ」と「OpenSSHクライアント」があるかを確認し、「オプション機能を追加する」の「機能を表示」から有効化されていないサービスにチェックして有効化します。
※OpenSSHクライアントについてはデフォルトで有効になっているかもしれません。

Monosnap_20240727_112705.png

OpenSSHサーバ有効化後、Windows起動時に自動でサービスを起動するようにします。

Windowsボタンから「services.msc」と検索し、「サービス」を選択。

Monosnap_20240727_113841.png

サービス」から「OpenSSH SSH Server」をダブルクリックし、プロパティ画面を開きます。

Monosnap_20240727_113937.png

スタートアップの種類」を「自動」にして、「開始」ボタンを選択してサービス起動しておきます。

Monosnap_20240727_114059.png

Tera TermでのローカルSSHサーバへの接続

OpenSSHサーバの準備ができたので、Tera Termで接続します。

Ubuntuに接続する場合と同様、localhostに接続するため、以下のように接続します。

項目 設定
ホスト localhost
サービス SSH
TCPポート 22
SSHバージョン SSH2
IPバージョン AUTO

接続する際、Windowsホスト側のユーザ名、パスワードで接続できるかと思いますので、入力して接続します。

項目 設定
ユーザ名 ※Windowsホスト側ユーザ名
パスフレーズ ※Windowsホスト側パスワード
認証方式 プレインパスワードを使う

ローカルSSHサーバに接続できてしまえば、後はUbuntuに接続した場合と同様のため、セッションマネージャーコマンドで接続します。

セッションマネージャーでの接続
aws ssm start-session --target [接続先EC2インスタンスID]

Monosnap_20240727_115537.png

もし接続できなかったり、パスワード認証ではなくSSH鍵認証で接続したい場合は以下の接続設定も行ってみてください。

SSH鍵認証での接続

ユーザ名、パスワードで接続してから接続できなかった場合や、ユーザ名、パスワードでの接続ではなく、鍵認証での接続を行う場合に以下実行してください。

鍵認証での方法も以下公式ドキュメントに記載されておりますので、以下に沿って設定していきます。

OpenSSHの設定変更

公式ドキュメントに記載されておりませんが、以下設定を行わないと鍵認証での接続がうまくいかなかったので設定します。

OpenSSHの設定を変更するため、「C:\ProgramData\ssh\sshd_config」をVS Code等のエディタで開いて、以下の設定箇所をコメントアウトします。

C:\ProgramData\ssh\sshd_configでのコメントアウト
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

保存する際、管理者権限が必要となるメッセージが表示されると思うので、管理者権限で保存します。

設定を反映するため、PowerShellを管理者モードで起動してOpenSSHを再起動します。

OpenSSHサーバの再起動
Stop-Service sshd
Start-Service sshd

SSH鍵の生成

この後も管理者モードで操作する箇所があるため、そのまま以下進めていきます。

SSH接続する際のSSH鍵を生成します。

SSHキーの生成
ssh-keygen -t ed25519

生成時、SSH鍵の出力先パスやパスフレーズが聞かれますが、すべてEnterでOKです。
※ファイル名等変更したい場合は任意で設定してください。

生成すると「C:\Users\username/.ssh/」に以下2つのファイルが作成されます。

ファイル名 備考
id_ed25519 SSH秘密鍵
id_ed25519.pub SSH公開鍵

SSH Agentを使用したSSH秘密鍵の登録

ssh-addを使用してSSH秘密鍵を格納するためにSSH Agentを管理者権限で有効にします。

自動起動の有効化とSSH Agentの起動
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

起動後、Get-Serviceコマンドで確認することで、起動できたか確認できます。

SSH Agentの状態確認
Get-Service ssh-agent

ssh-addコマンドで先程生成した秘密鍵を登録します。

ssh-addによるSSH秘密鍵の登録
ssh-add $env:USERPROFILE\.ssh\id_ed25519

正常に登録できたかはssh-add -lコマンドを実行することで確認できます。

ssh-addの登録設定確認
ssh-add -l
256 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx username@hostname (ED25519)

公開鍵の登録

SSH鍵認証でSSHサーバに接続する場合、authorized_keysファイルにあらかじめSSH公開鍵を登録しておく必要があるため、登録を行っていきます。

登録は以下コマンドを実行することで、authorized_keysファイルの作成や権限設定などいっぺんに行えるので、以下順番に実行します。

$authorizedKey変数の指定
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ed25519.pub
$remotePowershell変数の指定
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"

上記の変数設定後、以下コマンドを実行することで、SSH鍵ファイルを格納した「C:\Users\username/.ssh/」配下に「authorized_keys」ファイルが作成・公開鍵の登録が行われます。

以下usernameの部分は自分の環境のユーザ名を指定してください。

ssh username@localhost $remotePowershell

fingerprintの登録メッセージとパスワードが聞かれると思うので、fingerprintはyesで登録、パスワードは接続したユーザのパスワードを入力してください。

SSH秘密鍵でのSSH接続

上記までの手順で接続の準備ができたので、SSH鍵認証で接続できるか確認してみます。

username部分は自分の環境のユーザ名を指定して、以下コマンドを実行します。

sshコマンドでのSSH接続確認
ssh username@localhost

ちゃんと設定できていればパスワードは聞かれず、自分自身にログインできたかと思います。

ログイン時の表示例
Microsoft Windows [Version 10.0.22631.4037]
(c) Microsoft Corporation. All rights reserved.

username@ComputerName C:\Users\username>

Tera TermでのローカルSSHサーバへの接続(SSH鍵認証)

SSH鍵認証の設定を行ったので、Tera Termで接続してみます。

項目 設定
ホスト localhost
サービス SSH
TCPポート 22
SSHバージョン SSH2
IPバージョン AUTO

今回はSSH鍵認証を行うため、認証方式を「RSA/DSA/ECDSA/ED25519鍵を使う」で先ほど生成した秘密鍵を指定します。

項目 設定
ユーザ名 ※Windowsホスト側ユーザ名
パスフレーズ 空欄
認証方式 RSA/DSA/ECDSA/ED25519鍵を使う
秘密鍵 C:\Users\username\.ssh\id_ed25519

接続後はパスワードでの接続時と同様、セッションマネージャーコマンドで接続します。

セッションマネージャーのポートフォワード機能を使用して接続を行う

SSHにも同様の機能がありますが、セッションマネージャーにもポートフォワード機能があるため、指定のポートを接続先EC2インスタンスのSSHポートにフォワードすることで接続する方法となります。

EC2インスタンスに接続するまではセッションマネージャーで接続する方式となるため、セキュリティグループでSSHポートを許可する必要はありませんが、ポートフォワード先が接続先EC2インスタンスのSSHとなるため、今回の方式の場合、キーペアの作成が必要となってしまうためご注意ください。

セッションマネージャーのポートフォワードで接続する場合の前提条件

前述の通り、EC2インスタンスにSSH接続するためのキーペアが必要になります。

各システムのセキュリティ要件により、キーペアの作成ができない場合はこの手段を取ることができませんので、別の手段を検討してください。

事前準備:SSHキーペアの作成とEC2インスタンスの作成

今回の方式の場合、PowerShell等のプロンプトでセッションマネージャーポートフォワードのトンネルを作成し、Tera Termが対応しているSSHでEC2インスタンスに接続するため、AWS側でSSH接続用キーペアの作成とEC2インスタンスを作成しておきます。

前述の通り、セキュリティグループの設定は不要です。

セッションマネージャーポートフォワードの実行

PowerShell等のプロンプトを開き、以下コマンドを実行します。

実行することで、AWSのセッションマネージャーとローカルPCとの間に擬似的なトンネルができ、Tera Termで、「[任意の待受ポート]」で指定したローカルPC側ポート番号にアクセスすると、接続先のEC2インスタンスのSSHポートにフォワーディングされるようになります。

セッションマネージャーポートフォワードの実行
aws ssm start-session \
  --target [接続先EC2インスタンスID] \
  --document-name AWS-StartPortForwardingSession \
  --parameters portNumber=22,localPortNumber=[任意の待受ポート]
セッションマネージャーポートフォワード実行後の出力例
Starting session with SessionId: xxxxx-yyyyyyyyyyyyyyyyyyyyyyyyyy
Port [任意の待受ポート] opened for sessionId xxxxx-yyyyyyyyyyyyyyyyyyyyyyyyyy.
Waiting for connections...

セッションマネージャーとのトンネルを維持するため、ウィンドウはそのままにして、Tera Termで以下のようにSSH接続すると接続先EC2インスタンスにログインできます。

項目 設定
ホスト localhost
サービス SSH
TCPポート ※セッションマネージャーで指定した任意の待受ポート
SSHバージョン SSH2
IPバージョン AUTO

ローカルのポートに接続できれば、ユーザ名等の入力画面が開くため、ユーザ名やキーペア情報を指定して接続します。

項目 設定
ユーザ名 ec2-user
パスフレーズ ※空欄
認証方式 RSA/DSA/ECDSA/ED25519鍵を使う
秘密鍵 ※EC2接続用キーペア

問題なければTera TermでEC2インスタンスにログインできるはずです。

SSHキーペアの作成と、接続ユーザへのキーペアの共有が必要となるため、永続鍵を管理しないといけなくなる点は注意が必要です。

また、ポートフォワードのやり方次第でRDSに直接接続したり、プライベートサブネット上のサービスにアクセスしたりすることもできてしまう可能性があるため、システム管理者側の方たちからすると頭が痛い問題となるかもしれません。

もしこの方法を使用する場合、システム管理者の方はその点理解して利用するようにしましょう。

おわりに

オンプレからクラウドに移るにあたり、昔から使っているTera Termのようなソフトウェアから切り替えたいと思っていても、所属する組織の事情だったり、良い乗り換え先が見つからなかったりと、中々切り替えに踏み切れない方は多いかと思います。

私も以前はTera Termマクロを書きまくっていたので、すんなり切り替えできないという気持ちはよくわかります。

ただ単に他のソフトウェアに切り替えるのではなく、今まで蓄えてきたマクロ等を活用して使い続けたい方の参考になればと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0