tamanegiの日記: 備忘録-ssh のエスケープキャラクタ
ssh にはエスケープキャラクタなるものがある。
ssh でリモートホストにログインして改行の「直後」に ~? をたたくと、
# 文字入力したあと delete とか backspace で消したりしてもダメ。
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~@ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
というのが出る。(スタンダードな設定ならば)
で、個人的にホットな問題なのが ~. で接続を切るという動作。
最近の設定上、~/hoge/piyo/bar.sh みたいなコマンド呼び出しをすること
が結構あるんだけど、タイピングがテキトーな自分は良く間違えて ~. と打つ。
コマンド呼び出しなので必然的に改行直後というわけでサクっとログアウトに。
これをどうにかしたいので、はじめは PATH を通そうと思ったけど、
ディレクトリの構成上あんまりやりたくないとか、PATH に色々足すのは趣味
じゃないとかいうどうでもいい理由で断念。というか ssh で上の動作に関係
するエスケープキャラクタを簡単に変更できるのでそっちにすることに。
コマンドラインでも指定できるけど、多段 ssh の設定作るときに ~/.ssh/config
ファイルを作ってあったのでこちらに "EscapeChar @" という行を追加した。
(ちなみにデフォルトが ~)とりあえずこれでおっけーな感じにできた。
で、終わりの予定だっだけどまだ続く。今の環境では、
[目の前のマシン||自宅マシン]--- ssh ---[リモート親]--- rsh ---[リモート子]
という感じに接続しなきゃならないんだけど、rsh のほうでも同様の設定が必要だった。
こっちも対応するエスケープキャラクタのデフォルトが ~ で、~. で接続が切られるので。
rsh の方は通常 "rsh [ホスト名]" で接続してるんだけど、これだと実際には rlogin(1)
が呼び出されている。んで、エスケープキャラクタの設定は rlogin に渡す必要がある。
rlogin -e @ [ホスト名] とすれば ssh と同様にできるんだけど、rsh -e @ [ホスト名]
はできなかったりする。rsh はたしかに本来ログインしてうんぬんなものじゃないので
まぁわからんでもない。でもちょっと融通が効いてもいいんじゃないかとも思う。
ログインするときは rlogin, コマンド実行するときは rsh, と今更使いわけるのは面倒
なので、ちょっとした wrapper でも作ってごまかすかなぁ。
# きっとこの日記を書くよりも時間かかんないし。
# さっさと書けばいいのに、とかはいわないでおねがいします。
備忘録-ssh のエスケープキャラクタ More ログイン