ssh を使用して特定のポートに接続する方法を知っています。
ssh user@remotehostip -p XXX
SSHを確立する方法はありますかからローカルコンピュータが使用するポートはどれですか?
答え1
それは簡単にはできません。その方法は、送信元ポートがどこで確認されるかによって異なります。ローカルでも確認されるのでしょうか、それとも外部ネットワークの観点から見て正しいポートであれば十分でしょうか。
SSH クライアントを LXC コンテナで実行できます。私はまだ実行したことがないので、詳しく説明することはできません。ただし、仮想ネットワーク インターフェイスを作成してこのコンテナに接続すると、コンテナがssh
認識する唯一の (外部) インターフェイスがこのインターフェイスを使用するようになります。
ホスト システムでは、パケットがこのインターフェイスから来たことを検出できるはずです。したがって、Netfilter の NAT (SNAT) を使用して、送信元アドレスを次のように書き換えることができます。
iptables -t nat -A POSTROUTING -o vnet0 -p tcp --dport 22 -j SNAT --to-source :1234
もちろん、22 以外のポートに接続すると、これは機能しません (または複雑になります)。
答え2
おそらく、探しているコマンド構文はこれです。 ssh -p XXX user@remotehostip オプションの順序を変更する必要があります。今すぐ試してください。私の場合はうまくいきました。よろしくお願いします。
答え3
ルーター経由でポート転送している場合、この問題の簡単な解決方法は、受信ポートを任意のポートに設定し、ローカル ポートを 22 に設定することです。マシンは通常どおり 22 で SSH 接続を行いますが、ネットワークの外部から実際に接続する場合は、受信ポートを使用します。ボットが 22 でマシンを攻撃するのを阻止したいだけであれば、これで十分です。
これはあなたの特定の問題には役立たないかもしれませんが、多くの人がこの理由でここにたどり着くのではないかと思います。
答え4
コンテナなしの Hauke Laging の回答を基に、ssh クライアントを実行する前に次の iptables ルールを追加するだけで十分です。
iptables -t nat -A POSTROUTING -d <remotehostip> -p tcp --dport 22 -j SNAT --to-source :1234
SSH セッションが開かれた後にルールを削除できます。