web-dev-qa-db-ja.com

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

一部のリモートボックスで行う必要がある開発があります。幸い、私はシェルアクセスを持っていますが、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を使用してリモートボックスに接続するように構成できます。

4
TLane

socat をローカルに、gatewayで(またはbashcatだけを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: 

最初と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を使用する

ゲートウェイへの単一の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で使用できるのはcatgatewayのみです。

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:
3
A.B

SSHトンネリングは、両方の方法で実行できます。ルーターにSSH接続します。ルーターからdevboxにSSH接続します。次に、devboxからSSHを実行して、ポートフォワーディングを有効にした状態でSSHサーバーを実行しているコンピューターに送信接続を行い、devboxに転送するリモートポートを設定します。その時点で、他のssh接続を閉じることができます。

0
jdwolf

別のポートで実行するように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

これで、何でも転送できるはずです。

0