.ssh/configでssh -Nに対応するオプションは何ですか?

.ssh/configでssh -Nに対応するオプションは何ですか?

このコマンドと同じ結果を使用して構成ファイルにエイリアスを設定したいと思います。

ssh -N devdb -L 1234:127.0.0.1:1234

私の.ssh/configエントリdevdb

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234

シェルを起動したくない場合は、上記の設定に何を追加する必要がありますか?

答え1

したがって、ssh.cOpenSSH 7.6p1では、次のものを見つけます。

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

2つ以上-N

  • これはorオプションno_shell_flagにのみ表示され、ssh.cそのオプションに対してのみ有効になります。それ以外の場合は、バックグラウンドフォークに関連する完全性チェックに関連するいくつかの論理ブロックに表示されます。自分で設定できるオプションは表示されません。-W-NControlPersist
  • readconf.c対応するオプションに従って説明されます。request_ttyRequestTTYssh_config(5)

それから(OpenSSHをサルにパッチして再コンパイルしたり、オプションのssh_config切り替えを要求することとは別にno_shell_flag...)、次のような結果が残ります。

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat

技術的にはシェルを起動しますが、シェルはすぐにプログラムcatに置き換えられ、その後ポート転送の同時使用をブロックする必要があります。cat移植可能ですが、入力(存在する場合)を消費または失敗する可能性があります(標準入力が閉じられている場合)。別のオプションはブロックするだけを実行してください。

答え2

@thrigは、この作業を内部的にのみ行うことを望むあなたの欲求に応じて正解を提供しました。.ssh/config

他のトンネルコマンドをすばやく実行するためにデフォルト値を持つ関数を使用することを検討することもできます(特にトンネルが変更されず、ホストのみが変更される場合)。


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

以下は、その使用の3つの例です。引数がない場合、関数に指定されたデフォルト値が使用されます。

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

他のホストで実行されるデフォルトトンネルの使用:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

これら2つのデフォルト値を使用して、新しいホスト/トンネルで完全なワンタイムタスクを実行します。

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345

答え3

@thrigの答えに基づいたより便利なリモートコマンド:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _ユーザーがを押すまで接続がブロックされますcontrol+c

関連情報