/darallium/です!ご覧いただきありがとうございます。 😊
本日は「ssh接続を最速で再接続する」方法を紹介します
introduction
僕はメインで用いる開発環境を自鯖に置いてオンライン化している。
小さな開発ではいまだに手元のエディタを使うことは当然ある。しかし、多くの時間ではやはりリモート接続先で開発しているのだ。
そこで、ある問題が発生する。Windows OSの環境でターミナルを開いているとき、リロードがめんどくさいのである。
この記事では、開発環境をオンライン化するにあたって起きた問題の一つを解決する方法を提示する。
問題
Windows OS環境では多くの人がWindows Terminal
を使用しているだろう。筆者も利用している。
Windows Terminal
を使用しているとき、あるプラクティスとして「sshコマンドを直接プロファイルに置くことで、よくアクセスするサーバーに簡単にアクセスできるようになる」というライフハックがある。~/.ssh/conf.d/
以下に十分に設定していることを前提とすれば、ssh <user>@<Host>
を記述すればよい。
しかし、ここである問題が発生する。開発をするとき、設定をいじった影響で環境を再読み込みしたい場合がある。vscode
ならば、ctrl + shift + p + reload window
であろう。これを、ssh環境下で行う、すなわち接続を絶った場合には、一番親のプロセスが死んでしまいタブが閉じてしまうのだ。タブが閉じてしまった場合、専用のショートカットキーを割り当てていない限りマウス操作が必要になってしまうのだ。
解決法
-
以下を.bashrcに記述する。
if [ -n "$SSH_CONNECTION" ] ; then reload () { exit 1 } fi
-
Windows Terminalの対称のプロファイルの「プロファイルの終了時の動作」を自動またはプロセスが正常に終了したときのみ閉じるに設定する。
-
relaodコマンドでターミナルを終了する
man sshを眺めていたところ、SSH接続中にセットされる環境変数があることに気が付いた。SSH_CONNECTION
である。これは、SSH接続元とそのポートを記述している環境変数らしい。
実際にssh接続先でやってみたところ、以下のようになった。
確かに、手元の環境が記述されている。
$ env | grep SSH
SSH_CONNECTION=<localip 1> <localport 1> <localip 2> <localport 2>
SSH_CLIENT=<localip 1> <localport 1> <localport 2>
SSH_TTY=/dev/pts/0
そして、Windows Terminalには以下のようなオプションがある。
プロセスが正常に終了したときのみ閉じる
⇔プロセスが異常終了したら閉じない
ここで、linuxのexitコマンドは、引数に終了時の値=エラーレベルを記述できる。異常終了は0以外をセットしてやればよい。
referencing