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


13

このコマンドと同じ結果を持つエイリアスを設定ファイルに設定したい:

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(スイッチを覚えるのに十分な頻度ではありませんが、通常は同じポートを使用します、変更するのはホストだけです)。
WEBjuju

回答:


22

ssh.cOpenSSH 7.6p1 では、

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

次の-N2つのことも行います。

  • no_shell_flagのみに表示されssh.c、唯一のために有効になっている-Wか、-Nそうでなければ、それはに関連するいくつかの論理ブロックに表示され、オプションControlPersistのバックグラウンドフォークが関与して正気チェック。オプションで直接設定できる方法がわかりません。
  • によるとreadconf.c、に詳述されrequest_ttyているRequestTTYオプションに対応していますssh_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移植性はありますが、入力を消費する(存在する場合)か、失敗する可能性があります(標準入力が閉じている場合)。別のオプションは、単にブロックするもの実行することです


1
内でそれを行うための+1 .ssh/config...よくやった!
WEBjuju

この答えの素晴らしい研究!ありがとうございました!
メローイエロー

私は好むRemoteCommand exec sleep infinity
トーマス

3

@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

0

@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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.