ProxyJumpをBashに置き換える

ProxyJumpをBashに置き換える

一部のリモートボックスに対して開発を行う必要があります。幸いなことに、シェルにアクセスできますが、AllowTcpForwardingがfalseに設定されているゲートウェイを通過する必要があります。

私はドキュメントで次のようなピークを見ました。

AllowTcpForwarding TCP 転送が許可されるかどうかを指定します。デフォルトは「はい」です。ユーザーはいつでも独自のフォワーダーをインストールできるため、TCP転送を無効にしてもユーザーがシェルアクセスを拒否しない限り、セキュリティは向上しません。

自分のリピータをどのようにインストール(または構築)するのですか?私の目標はPycharmのリモートインタプリタの使用データはSSHを介して供給され、ゲートウェイを介して一部のローカルポートにバインドされ、コードが実際に実行される開発ボックスにバインドされます。私は何とかncや他のUnixユーティリティを活用して作業を完了できると思います。

次の方法でリモートボックスにSSHで接続できることがわかります。

ssh -t user1@gateway ssh user2@devbox

しかし、明らかにこのオプションはpycharmでは利用できません。一部のローカルポートを開くことができる必要があります。

ssh -p 12345 localhost
(or variant)

user2@devboxに接続します。これにより、リモートボックスに12345接続するためにポートを使用するようにリモート通訳者を設定できます。localhost

ベストアンサー1

実行できる限りsocatlocalとon gateway(またはさらにはbashand caton gateway、最後の例を参照してください!)と許可いいえptyを使用すると、8ビットがきれいになり、SSH経由でトンネルできます。以下は、前の例を改善した4つの例です。

基本的な例は一度だけ動作します。

(フォークにはトンネルごとに1つのSSH接続が必要であるため、それはお勧めできません。):execコマンドを受け入れるには、socatをエスケープする必要があります。

  • 1学期:
    $ socat tcp-listen:12345,reuseaddr exec:'ssh user1@gateway exec socat - tcp\:devbox\:22',nofork
    
  • 2学期:
    $ ssh -p 12345 user2@localhost
    
  • 1学期:
    user1@gateway's password:
    
  • 2学期:
    user2@localhost's password: 
    

最初のアドレスと2番目のアドレスを逆にすると、ソケットをすぐに使用できます。

socat責任を負う必要があるため、以下を行わないでくださいnofork

  • 1学期:
    $ socat exec:'ssh user1@gateway exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
    user1@gateway's password:
    
  • 2学期:
    $ ssh -p 12345 user2@localhost
    user2@localhost's password:
    

使うControlMasterSSH

Aは、ゲートウェイへの単一のSSH接続のみを使用するときに分岐を許可し、一般的なポート転送と同様の動作を提供します。

  • 1学期:
    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket user1@gateway
    user1@gateway's password:
    
  • 2学期:
    $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket user1@gateway exec socat - tcp\:devbox\:22'
    
  • アイテム3:
    $ ssh -p 12345 user2@localhost
    user2@localhost's password:
    

のみ可能bashです。catgateway

使用してbash組み込みTCPリダイレクトおよび2つの半二重catコマンド(全二重結果用)はリモートsocatまたはnetcatbashリモートスクリプト。分岐はcat出力にのみ使用されることに注意することが重要です。

  • 項目1(変更なし):
    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket user1@gateway
    user1@gateway's password:
    
  • 2学期:
    $ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket user1@gateway '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'
    
  • アイテム3:
    $ ssh -p 12345 user2@localhost
    user2@localhost's password:
    

おすすめ記事