GNU/Linux >> Linux の 問題 >  >> Linux

AllowTcpForwarding を no に設定して ssh 転送する方法は?

socat を実行できる限り ローカルおよび gateway で (または単に bashcat 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 として使用したり、キーストロークで完全に端末セッションを記録したりすることは、どちらも本物です。

ただし、適用されるポリシーに違反していないことを常に確認してください!


Linux
  1. SSHトンネリングを設定する方法

  2. SSHキーを設定する方法

  3. エポックフォーマットで日付を設定する方法は?

  1. Web転送を設定する方法

  2. 方法:Ansibleを使い始める

  3. Debian で SSH キーを設定する方法

  1. 22以外のポートへのSSH:それを行う方法(例付き)

  2. パスワードでSSHログインを無効にする方法

  3. Ubuntu18.04でSSHキーを設定する方法