web-dev-qa-db-ja.com

ssh -Nの.ssh / config対応オプションとは

次のコマンドと同じ結果になるように、構成ファイルにエイリアスを設定したいと思います。

ssh -N devdb -L 1234:127.0.0.1:1234

devdbの.ssh/configエントリ:

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234

シェルを起動しないようにするには、上記の設定に何を入れますか?

14
mikeb

OpenSSH 7.6p1の_ssh.c_では、

_            case 'N':
                    no_Shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;
_

したがって、_-N_は2つのことを行います。

  • _no_Shell_flag_は_ssh.c_にのみ表示され、_-W_または_-N_オプションに対してのみ有効です。それ以外の場合は、ControlPersistおよび健全性に関連するいくつかのロジックブロックに表示されますバックグラウンドフォークを含むチェック。オプションで直接設定する方法がわかりません。
  • _readconf.c_によると、_request_tty_はssh_config(5)で説明されているRequestTTYオプションに対応します。

これは(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は移植可能ですが、入力がある場合(ある場合)、または失敗する可能性があります(標準入力が閉じている場合)。別のオプションは ブロックするだけのものを実行する です。

23
thrig

@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

両方のデフォルトで、新しいホスト/トンネルに対して完全な1回限りの実行:

$ sshn Host3 12345:127.0.0.1:12345
executing ssh -N Host3 -L 12345:127.0.0.1:12345
3
WEBjuju

@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を押すまで接続をブロックします。

0
Tobias Sette