socat
を実行できる限り ローカルおよび gateway
で (または単に bash
と cat
gateway
で 、最後の例を参照してください!)、許可されていません pty を使用して 8 ビットをクリーンにすると、ssh を介してトンネルを確立できます。前のものを改良した 4 つの例を次に示します。
一度動作する基本的な例
(フォークすると、トンネルごとに 1 つの ssh 接続が必要になりますが、良くありません)。 :
をエスケープする必要がある socat が exec コマンドを受け入れるようにするには:
term1:
$ socat tcp-listen:12345,reuseaddr exec:'ssh [email protected] exec socat - tcp\:devbox\:22',nofork
term2:
$ ssh -p 12345 [email protected]
term1:
[email protected]'s password:
term2:
[email protected]'s password:
1 番目と 2 番目のアドレスを逆にすると、ソケットがすぐに利用可能になります
socat
nofork
はありません。 :
term1:
$ socat exec:'ssh [email protected] exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
[email protected]'s password:
term2:
$ ssh -p 12345 [email protected]
[email protected]'s password:
ControlMaster
を使用する ssh
ゲートウェイへの ssh 接続を 1 つだけ使用しながら fork できるため、通常のポート転送と同様の動作になります:
term1:
$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:
term2:
$ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket [email protected] exec socat - tcp\:devbox\:22'
ターム3:
$ ssh -p 12345 [email protected]
[email protected]'s password:
bash
しかない および cat
gateway
で利用可能
bash
を使用する の組み込みの tcp リダイレクト、および 2 つの半二重 cat
コマンド (全二重の結果の場合) リモートの socat
さえ必要ありません または netcat
.ネストされた複数の引用符とエスケープされた引用符の処理は少しぎこちなく、リモートの bash
を使用することでより適切に処理または簡素化できる可能性があります 脚本。分岐した cat
を持つように注意する必要があります 出力のみ:
term1 (変更なし):
$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:
term2:
$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket [email protected] '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'
ターム3:
$ ssh -p 12345 [email protected]
[email protected]'s password:
ProxyJump を Bash に置き換える
上記のアイデアは良いです! ProxyJump 時の一般的な ssh_config バージョンは次のとおりです。 動作していません AllowTcpForwarding のため no に設定し、私のデフォルトのシェルは BASH です:
ProxyCommand=ssh -T [email protected] "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
- -T 疑似端末割り当てを無効にする
- 重役 新しいプロセス (bash) は作成されません
- 3<> 利用可能なファイル記述子へのリダイレクト
- /dev/tcp/... 対応する TCP ソケットを開くように bash に要求します。
- %h と %p OpenSSH クライアントによって devbox として評価されます 22
- 2<&- STDERR を閉じます (/dev/null にリダイレクトすることもできます)
- 猫 <&3 & 選択したファイル記述子 3 をバックグラウンドで読み取ります
- 猫>&3 ファイル記述子をフォアグラウンドに書き込みます
- $ を殺せ! 「読書」猫 <&3 を殺します 接続を閉じる/切断するときにバックグラウンドで実行されるコマンド。そうしないと、実行が継続されます。
ジャンプ サーバーで ProxyJump が無効になっている状況では、ProxyJump を置き換えることができましたが、秘密鍵をそこに転送したり、特別なレベルの暗号化なしでパスワードを入力したりしたくありませんでした。他の SSH_AUTH_SOCK を root として使用したり、キーストロークで完全に端末セッションを記録したりすることは、どちらも本物です。
ただし、適用されるポリシーに違反していないことを常に確認してください!