【TeraTerm】公開鍵認証方式による SSH 接続の自動化
どうも,筆者です.
最近,TeraTerm で LAN 内のサーバにアクセスすることが増えたが,毎回,サーバの指定とパスワードの入力が必要となる.
ここでは,TeraTerm の機能を利用し,ショートカットキーで TeraTerm のマクロを呼び出し,自動的に SSH 接続できるような仕組みを構築する.
本来は,安全のためにパスフレーズを入力するが,今回は,LAN 内の使用を前提とするため,パスフレーズの設定は省略する.
使用する TeraTerm に関する情報
- TeraTerm は,ポータブル版を利用する.
- 使用する TeraTerm のバージョンは,4.102 である.
TeraTerm の配置場所は以下のようにする.
C:\Users\user\OneDrive\デスクトップ\apps\teraterm-4.102
参考サイト
以下のサイトを参考に,作業を行った.
自動化の準備
公開鍵と秘密鍵の生成
TeraTerm の機能を用いて,公開鍵と秘密鍵を生成する.今回は,C:\Users\user\OneDrive\デスクトップ\apps\ssh_keyfile
以下に公開鍵と秘密鍵を保存する.
「Setup」→「SSH KeyGenerator」を押下する.
「Key type」を「RSA」,「Key Bits」を「4096」とする(Key Bits:鍵の長さは 4096 以外でもよいが,なるべく長い方が良い).また,「bcrypt KDF format」のチェックを外し,「Generate」を押下する.
今回はパスフレーズなしのため,「Key passphrase」と「Confirm passphrase」は空欄のままとし,「Save public key」と「Save private key」を順に押下する.
「Save private key」を押下時に,以下のようなメッセージが表示される.これは,「はい」を押下する.今回はパスフレーズなしのため,このような警告が表示される.
公開鍵の設置
生成した公開鍵を SSH 接続先のサーバに配置する.
「File」→「New connection ...」を押下する.表示されたダイアログから接続先のサーバを指定し,「OK」を押下する.
いつも通り「username」と「password」を入力し,「OK」を押下する.ここでは,ラズパイに接続するため,username を
pi
とする.ログイン後,「File」→「SSH SCP」を押下し,公開鍵「id_rsa.pub」をサーバのホームディレクトリにコピーする.ここでは,「From」には,
C:\Users\user\OneDrive\デスクトップ\apps\ssh_keyfile\id_rsa.pub
を,「To」には,~/
を指定した.ファイルを転送が完了したら,コマンド操作で公開鍵(~/id_rsa.pub)を authorized_keys に追記する.
# 作業ディレクトリの確認 pwd # 出力結果:/home/pi # ファイルの確認 ls # 出力結果:id_rsa.pub # .ssh ディレクトリの生成とパーミッションの設定 mkdir .ssh chmod 700 .ssh # 公開鍵の追記 cat id_rsa.pub >> .ssh/authorized_keys # authorized_keys のパーミッションの設定(初回生成時のみ) chmod 600 .ssh/authorized_keys # サーバから切断 exit
公開鍵認証方式によるログイン
再度,TeraTerm を立ち上げ,接続先を選択し,ユーザ名とパスワードを入力する画面を表示させる.その状態で,「Use RSA/DSA/ECDSA/ED 25519 key to log in」を選択し,「Private key file:」を押下し,先ほど生成した秘密鍵を選択する.今回の場合,秘密鍵は C:\Users\user\OneDrive\デスクトップ\apps\ssh_keyfile\id_rsa
となる.
上記において,username を入力後に「OK」を押下して,サーバに接続できることを確認する.
TeraTerm マクロによる自動化
本題に入る.ここでは,TeraTerm マクロを用いて,以下を実現する.
- ショートカットキーによる接続先の選択
- SSH 接続に対し,有効なショートカットキーの一覧の表示
- ショートカットキー押下後に自動接続
TeraTerm マクロの作成
サーバへ自動接続するために,マクロを作成する.ここでは,C:\Users\user\OneDrive\デスクトップ\apps\teraterm_macros
というディレクトリを作成し,その中にマクロファイルを格納する.
サーバへの自動接続時に使用するマクロを以下に示す.ここでは,このファイルを「nas_server.ttl」として保存する.
; ===== setting ===== ; usrename username = 'pi' ; port port = 22 ; secret file path keyfile = '"..\ssh_keyfile\id_rsa"' ; hostname hostname = 'nas.example.com' ; ===== end ===== ; create connection command getdir current_dir sprintf2 private_key_fullpath '%s\%s' current_dir keyfile sprintf2 msg '%s:%d /ssh2 /auth=publickey /user=%s /keyfile=%s' hostname port username private_key_fullpath ; connect to server connect msg
作成したファイルをダブルクリックし,パスフレーズを入力することなくログインできることを確認する.
ショートカットキーの登録
teraterm-4.102
内にある KEYBOARD.CNF
を修正し,ショートカットキーを登録する.ここでは,Ctrl + F1 を押下時に,先ほど作成した「nas_server.ttl」が呼び出されるように設定する.
上記を実現するために,ファイルの末尾にある [User keys]
部分に以下を追記する.
; === User key definitions === [User keys] ; Ctrl + F1 key: connect nas server User1=1083,2,..\teraterm_macros\nas_server.ttl
上記を設定後,TeraTerm を開き,ショートカットキー(Ctrl + F1)を押下すれば,指定したマクロが呼び出され,サーバに接続できる.ショートカットキーを押下する際は,事前に「New connection」の画面を閉じること.
TeraTerm 起動時の設定の変更
上記の方法でショートカットキーによりサーバへ接続できるようになった.しかし,毎回表示される「New connection」を閉じる必要があることとショートカットキーを覚えておく必要がある.ここでは,この 2 点について改善する.
ショートカットキーの一覧を表示するマクロの作成
先ほど追加したショートカットキーを表示するマクロを作成する.ここでは,このマクロは teraterm-4.102
内に「startup_dialog.ttl」として保存する.
作成したマクロを以下に示す.
; refer to user key definitions sprintf2 msg '' strconcat msg 'Ctrl + F1: nas server\n' ; 今後追加する際は,この行を複製する ; convert special characters strspecial msg ; show status dialog statusbox msg 'server list' ; wait [sec] pause 3 ; close status dialog closesbox
設定ファイルの更新
teraterm-4.102
内にある TERATERM.INI
を開き,以下を修正する.
HostDialogOnStartup=on
をHostDialogOnStartup=off
に修正.これにより,「New connection」のダイアログが非表示になる.
StartupMacro=
をStartupMacro=startup_dialog.ttl
に修正.これにより,上記で作成した「ショートカットキーを表示するマクロ」が起動時に実行される.
起動時に表示される画面を以下に示す.このダイアログは 3 秒程度経過すると表示されなくなる.