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:
    

答え2

ProxyJumpをBashに置き換える

上階に良いアイデアがあります!これは私の一般的なssh_configバージョンです。プロキシジャンプ動作しませんなぜならTcp転送を許可no に設定すると、デフォルトのシェルは BASH です。

ProxyCommand=ssh -T user1@gateway "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
  • -ティー疑似端末割り当ての無効化
  • 実装する新しいプロセスは作成されません(bash)。
  • 3<>利用可能なファイル記述子にリダイレクトするだけです。
  • /dev/tcp/...bashは対応するTCPソケットを開くように要求されます。
  • %時間そして%血OpenSSH クライアントは次のように評価します。開発ボックスそして番号22
  • 2<&-STDERRを閉じます(/ dev / nullにリダイレクトすることもできます)。
  • 猫<&3&選択したファイル記述子 3 がバックグラウンドで読み取られます。
  • 猫>&3前景のファイル記述子に書きます。
  • $を殺す!「読書」を殺す猫<&3クローズまたは切断すると、コマンドはバックグラウンドで実行されます。それ以外の場合は実行を続けます。

ジャンプサーバーでProxyJumpを無効にすると、私には有効ですが、追加の暗号化レベルなしで秘密鍵をそこに渡したり、パスワードを入力したくありません。他のSSH_AUTH_SOCKをrootとして使用するか、キーストロークでターミナルセッションを完全に記録することはすべて実用的です。

ただし、常に自分に適用されるポリシーに違反しないように注意してください。

答え3

いいえ、私たちはNetcatについてほとんど忘れていました!

ジャンプホストにNetcat(すべてのバージョン)がある場合は、通常、次のように構成でProxyJumpの代わりに使用できます。

ProxyCommand=ssh -T user1@gateway "exec nc %h %p"

またはコマンドラインから:

ssh user2@devbox -oProxyCommand="ssh -T user1@gateway 'exec nc devbox 22'"

答え4

別のポートで実行するように別のSSHDを設定しました。
tcpforwardingを許可するように設定を編集します。

cp /etc/ssh/sshd{,-second}_config 

sshd-second_configの編集

Port 22220
cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sshd-second.service

/etc/systemd/system/sshd-second.service を次のように変更します。

Description=OpenSSH server second instance daemon
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS

ExecStart行はバージョンによって異なる場合があります。

systemctl daemon-reload
systemctl enable sshd-second.service --now

詳細はこちらからご覧いただけます。
https://access.redhat.com/solutions/1166283

今欲しいものは何でも伝えることができます。

関連情報