February 7, 2024

OpenSSHで接続後に~Cでcommandline disabledが出る

3行で解説

いつの間にか、OpenSSHで接続後に『~C』を入力してもコマンドラインが開かず「commandline disabled」が表示されるようになった。
OpenSSH 9.2にてデフォルト"no"で追加されたEnableEscapeCommandlineが原因。
『~C』でコマンドラインを開くよう戻すには、ssh_configにEnableEscapeCommandline yesを書く。

長めに解説

man sshにあるとおり、OpenSSHでは接続後に『~C』を入力することでコマンドラインを開くことができる。

ssh hoge-server -L3306:127.0.0.1:3306のように、SSH接続にSSHポート転送オプションを指定しなくても、SSH接続にポート転送を開始、終了できる便利なもの。

nissy@db-server:~$ ~C
ssh> -L3306:127.0.0.1:3306
Forwarding port.

nissy@db-server:~$ ~C
ssh> -KL3306
Canceled forwarding.

※ 実際には『~C』は表示されない。
※ 1文字も入力していないコマンドプロンプトでのみ有効なので、何か1文字でも入力した場合は何も入力せずEnterキーを押して次のプロンプトで『~C』を押す。

OpenSSH 9.2EnableEscapeCommandlineというオプションが追加され、デフォルトは"no”。
これが"no"だと件の『commandline disabled』が表示される。

Potentially-incompatible changes
--------------------------------

 * ssh(1): add a new EnableEscapeCommandline ssh_config(5) option that
   controls whether the client-side ~C escape sequence that provides a
   command-line is available. Among other things, the ~C command-line
   could be used to add additional port-forwards at runtime.

   This option defaults to "no", disabling the ~C command-line that
   was previously enabled by default. Turning off the command-line
   allows platforms that support sandboxing of the ssh(1) client
   (currently only OpenBSD) to use a stricter default sandbox policy.

元に戻すというか『~C』でコマンドラインを開くようにするには、ssh_config($HOME/.ssh/config)にEnableEscapeCommandline yesを書く。

© 2020 nissy-lab.com