![ファイアウォールをブリッジするために netcat を使用しますか?](https://rvso.com/image/1497459/%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%82%92%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%20netcat%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
ファイアウォールの背後にマシンがあります。それは私のマシンで、ssh を設定しましたが、完全にファイアウォールで保護されています。私の解決策は、cron ベースで設定されたリバース シェルを使用して、netcat を使用して失敗した場合に再接続することです。コマンドは、ローカルbash -i >& /dev/tcp/myhostname.duckdns.org/10000 0>&1
コンピュータでnc -l 10000
および です。コマンドを使用してプライベート VPN に参加するように指示できるため、これまではこれが機能していました。何らかの理由で、そのコマンドが機能しません。そのため、生成された bash シェルを介して「ログイン」することはできますが、Pseudo-terminal will not be allocated because stdin is not a terminal.
そのシステムで ssh キーを設定したことがないため、自分のコンピュータに ssh で戻ることができず、パスワードでログインできません。
そこで、netcat を使用して解決策を見つけようとしましたが、うまくいきませんでした。私が思い描いているのは次のようなものです。
[サーバー] ---netcat--> [my-computer:port1]
そうすれば、それを利用して sshd サーバーにログインし、修正が必要な箇所を修正できます。しかし、それを実現する netcat コマンドがわかりません。何か助けてもらえませんか?
答え1
インターネットの残りの人々(そして私自身)のための答えを見つけました。netcat のみを使用してポート転送を実現する方法は次のとおりです(OS X El Capitan で動作することが確認されています)。
(受信)ファイアウォールの背後にあるサーバーの場合:
nc localhost 22 >& /dev/tcp/<your-hostname>/<open port on local computer, i.e. 9000> 0>&1
ローカルコンピューターの場合:
cd /tmp; mkfifo backpipe
nc -l 9000 0<backpipe | nc -l 9001 | tee backpipe
ローカル コンピューター上の別のターミナル:
ssh localhost -p 9001