一部のリモートボックスに対して開発を行う必要があります。幸いなことに、シェルにアクセスできますが、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
実行できる限りsocat
localとon gateway
(またはさらにはbash
and cat
on 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:
使うControlMaster
SSH
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
です。cat
gateway
使用してbash
組み込みTCPリダイレクトおよび2つの半二重cat
コマンド(全二重結果用)はリモートsocat
またはnetcat
。bash
リモートスクリプト。分岐は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
今欲しいものは何でも伝えることができます。