一部のリモートボックスで行う必要がある開発があります。幸い、私はシェルアクセスを持っていますが、AllowTcpForwardingがfalseに設定されているゲートウェイを経由する必要があります。
私はドキュメントでピークを取って、それは言います:
AllowTcpForwarding TCP転送が許可されているかどうかを指定します。デフォルトは '' yes ''です。TCP転送を無効にしても、ユーザーがシェルも拒否されない限り、セキュリティは向上しません。いつでも独自のフォワーダーをインストールできるため、アクセスできます。
自分のフォワーダーをインストール(または構築)するにはどうすればよいですか?ここでの私の目標は、SSHを介して Pycharmを使用したリモートインタープリター をセットアップし、ローカルポートにバインドし、そのデータをssh経由で、ゲートウェイ経由で、そしてコードが実際にある開発ボックスにバインドすることです実行します。私はどういうわけか、仕事を成し遂げるのに役立つncまたは他のUNIXユーティリティを利用できると思います。
私は次のようにして自分のリモートボックスにsshできることを知っています:
ssh -t user1@gateway ssh user2@devbox
しかし、明らかにこのオプションはpycharmでは利用できません。私はいくつかのローカルポートを開くことができるようにする必要があります
ssh -p 12345 localhost
(or variant)
私をuser2 @ devboxに接続します。これにより、リモートインタープリターがlocalhost
のポート12345
を使用してリモートボックスに接続するように構成できます。
socat
をローカルに、gateway
で(またはbash
とcat
だけをgateway
で実行する場合は、最後の例を参照してください!)、notptyを使用して8ビットをクリーンにします。sshを介してトンネルを確立することが可能です。以下は、前の例を改良した4つの例です。
(フォークすると、トンネルごとに1つのssh接続が必要になるため、問題があります)。 socatがexecコマンドを受け入れるには、:
をエスケープする必要があります。
用語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:
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を使用するゲートウェイへの単一のssh接続のみを使用してforkできるため、通常のポート転送と同様の動作を提供します。
用語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
を出力専用にするように注意する必要があります。
term1(変更なし):
$ 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:
SSHトンネリングは、両方の方法で実行できます。ルーターにSSH接続します。ルーターからdevboxにSSH接続します。次に、devboxからSSHを実行して、ポートフォワーディングを有効にした状態でSSHサーバーを実行しているコンピューターに送信接続を行い、devboxに転送するリモートポートを設定します。その時点で、他のssh接続を閉じることができます。
別のポートで実行するように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/116628
これで、何でも転送できるはずです。