
このコマンドと同じ結果を使用して構成ファイルにエイリアスを設定したいと思います。
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.c
OpenSSH 7.6p1では、次のものを見つけます。
case 'N':
no_shell_flag = 1;
options.request_tty = REQUEST_TTY_NO;
2つ以上-N
:
- これはorオプション
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
移植可能ですが、入力(存在する場合)を消費または失敗する可能性があります(標準入力が閉じられている場合)。別のオプションはブロックするだけを実行してください。。
答え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
。