ツータッチで任意のサーバーへ SSH 接続を行うバッチファイル
この記事は2023/10/01に作成されました。
インフラを管理するエンジニアであれば一日一回から百回は利用するであろう SSH 接続ですが、皆さんはどのように SSH 接続をしていますか?
一般的には SSH クライアントソフトを使用するか、直接ターミナルで ssh コマンドを使用するでしょうか。
僕はインフラを触り始めた初期、 PuTTY を使用していました。
当時はさほど不満も無かったのですが、紆余曲折を経て現在ではこの記事で紹介している .bat ファイルを Windows Terminal で使用しています。
何百のサーバーを管理するには不向きですが、もし SSH 接続を煩わしく感じていたら参考にしてみてください。
動作デモ
実際にどのように動くかの GIF 画像を用意しました。
僕は Windows Terminal で独自プロファイルを使用しているのですが、「コマンドライン」項にこの記事で紹介しているバッチファイルを指定しています。
なので、タブでそのプロファイルを開いただけで SSH の選択画面になっているのが分かるかと思います。
選択画面には選択可能なサーバーの説明と番号が表示されていますが、その番号を入力してから Enter を押すと、実際に SSH 接続が開始される仕組みになっています。
上記 GIF 画像では「2」を入力しているので「local ubuntu」への接続が行われていました。
その後実際にサーバーへ接続されますが、その直後に exit を押して接続を切ると、また接続先のサーバー選択画面へ戻ってきます。
このように、既に作業が終わったタブから続けて別の SSH 接続をするときや、サーバー側から SSH 接続が遮断された際に再接続を試みるときも、素早く SSH 接続を行うことができます。
.bat ファイル
実際の .bat ファイルは以下です。
@echo off
rem UTF-8 でファイルを保存する場合は文字化け対策用に以下を記述
chcp 65001
rem ssh 接続が切れた際に再起動するためのラベル
:start
rem 接続先の説明
echo.
echo -------- Choose SSH start --------
echo 1.example.com
echo 2.local ubuntu
echo.
rem 接続先をユーザーに選択させる
set /P server="Choose ssh server ... (1,2,3,4,5)? "
rem ユーザーが選択した SSH 接続を試みる
if %server% == 1 (
ssh xxx.xxx.xxx.xxx -p xxx -l xxx -i ~/.ssh/xxx
goto :start
) else if %server% == 2 (
ssh xxx.xxx.xxx.xxx -p xxx -l xxx -i ~/.ssh/xxx
goto :start
) else if %server% == 3 (
ssh xxx.xxx.xxx.xxx -p xxx -l xxx -i ~/.ssh/xxx
goto :start
) else if %server% == 4 (
ssh xxx.xxx.xxx.xxx -p xxx -l xxx -i ~/.ssh/xxx
goto :start
) else if %server% == 5 (
ssh xxx.xxx.xxx.xxx -p xxx -l xxx -i ~/.ssh/xxx
goto :start
)
rem 正しくない選択肢が選ばれた
echo Please choose one of the options (1,2,3,4,5).
pause
goto :start
ざっと流し見すれば分かるように、このままだとテンプレ状態なので、実際に接続するサーバーごとにバッチファイルを書き換える必要があります。
具体的には、
- 「rem 接続先の説明」の下にある echo を好きな説明文に置き換える。
- 「set /P server="Choose ssh server … (1,2,3,4,5)? "」のダブルクオーテーション内を好きな説明文に置き換える。
- 「if」or「else if」に続く「%server% == 1」の末尾数字を選択肢の数だけ追加・削除する。
- 「if」or「else if」の中一行目に ssh の接続コマンドを書き、次の表に「goto :start」を書く。
- 「rem 正しくない選択肢が選ばれた」の下にある echo を好きな説明文に置き換える。
を設定してください。
その上で Windows Terminal の任意プロファイルにて「コマンドライン」項にこの bat ファイルを指定、もしくはコマンドプロンプトか PowerShell で直接実行すれば動くと思います。
まとめ
実は本格的な .bat ファイルは今回初めて書いたのですが、案外負担使用しているプログラミング言語と同じ感触で書けて面白かったです。
おそらくもっと熟達すれば接続定義だけ別ファイルに書き出したりできると思いますが、現在のところはこのワークフローに満足しています。
Windows Terminal を使用してすれば任意の .bat ファイルを初回実行できるようになるので、アイディア次第で日々の業務を効率化できそうですね。
プログラマー/N.Go