【TeraTerm】公開鍵方式のSSHログインマクロ、接続/認証できない問題を解決した

サーバ

もともとは、「XserverにLaravelインストール」をやってました。

【Laravel】XserverにLaravelインストールするときの注意点
やっと受験終わったんで、2年ぶりにLaravelのインストールしようと思ったんですが、何も覚えてなくて、かつ何もメモしてなくて困ったので、今回はさすがにメモしておきます。無難にTeraTerm使います。 超cf. とはいっても、↓の記事...

「ちょっと、これ(表題)できたら効率上がるな~」とか、軽い思い付きで脱線したら、これが沼も沼。

全然接続できないし、エラーメッセージもでないので、1時間弱トラブルシューティングする羽目に...泣

間違ってないっていう思い込みは本当に良くないなと改めて思わされました。

解決策

結果からいうと、なぜか検索上位にでてくる複数のページのコードに、変数の代入し忘れがあります。

ほぼ同じコードが、複数サイトで貼られていて、代入忘れがあるので、何かしらのリファレンスとかにミスがあるのかもしれない(かもしれない)です。

「teraterm 自動ログインマクロ 公開鍵」と検索

username = 'otsuka'          ; ログインするサーバーのユーザー名
hostname = '192.168.0.8'     ; ログインするサーバーのホスト名またはIPアドレス
key_file = 'id_rsa'          ; 秘密鍵ファイルを指定
passwdfile = 'passwd.dat'    ; パスワード暗号化ファイル
portnum = '22'

getpassword passwdfile username userpasswd ; パスワード暗号化ファイルからパスフレーズ取得

msg = hostname
strconcat msg ':portnum /ssh /auth=publickey /user='     ; 公開鍵認証を指定
strconcat msg username
strconcat msg ' /passwd='
strconcat msg userpasswd
strconcat msg ' /keyfile=' 
strconcat msg key_file
strconcat msg inputstr
connect msg

出典: https://qiita.com/yasushi-jp/items/ec578da715f139542886

username = 'karuma'
hostname = 'aaa.bbb.ccc.ddd'
key_file = 'id_rsa' ← 秘密鍵ファイルを指定
passwdfile = 'passwd.dat'
portnum = '22'

getpassword passwdfile username userpasswd ← パスフレーズを暗号化ファイルとして保存

msg = hostname
strconcat msg ':portnum /ssh /auth=publickey /user=' ← 公開鍵認証を指定
strconcat msg username
strconcat msg ' /passwd='
strconcat msg userpasswd
strconcat msg ' /keyfile=' 
strconcat msg key_file
strconcat msg inputstr

connect msg

出典: https://webkaru.net/linux/tera-term-macro-key-login/

ここで、なぜか「portnum」が代入されていないので、接続できなかったようです。

「portnum」に変数値を使うように書き換えます。

msg = hostname
strconcat msg ':'
strconcat msg portnum
strconcat msg ' /ssh /auth=publickey /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg userpasswd
strconcat msg ' /keyfile=' 
strconcat msg key_file
strconcat msg inputstr
connect msg

これでOK!

 

と、ここで終わってもいいのですが、今回、こういう場合に「有効なトラブルシューティングの方向性」について自分にとって勉強になったことがありました!

有効なトラブルシューティングの方向性

自分にとってすごく勉強になったのは、当たり前のことだけど、何よりもまずは、

生成された文を出力(output/print)すべし ということ。

 

今回の場合だと、

messagebox msg "msg"

を、「connect msg」の前に1行入れると、

完成した文を出力(output/print)することができます。

cf.

Tera Termのログインマクロについて
### 前提・実現したいこと Tera Termのパスワード認証を.batまたは.ttlで実行したいです。  

コメント