TCPネットワークを介して対話型シェルを使用していますが、bash
CTRL + cシーケンスをリモートで送信する方法はわかりませんbash
。
まずnetcat
インスタンスを実行します(ここでリモートbashと対話します)。
nc -nvlp 8000
その後、リモートで実行します(簡単にするためにlocalhostを使用するので、他の端末でローカルで試すことができます)。
bash -i >& /dev/tcp/localhost/8000 0>&1
netcat端末に表示される対話型bashを使用してコマンドを送信できるようになり、コマンドが実行され、結果が表示されます。
私がまだ理解していないのは、CTRL + cシーケンスをリモートbashに伝播し、プロセスでそれを無視する方法ですnetcat
。
これまでに試したことは次のとおりです。
nc -nvlp 8000 & trap "printf '\003' >/proc/$!/fd/0" INT; fg; trap 0 INT
これはnetcat
バックグラウンドで開始して設定し、受信するとtrap
ファイル終了シーケンス(0x03
)をnetcatの標準入力として出力します。SIGINT
次に、このfg
コマンドを使用してnetcat
対話型セッションを開始できるように、プロセスをフォアグラウンドにインポートします。コマンドの実行は正常に機能しますが、CTRL + cシーケンスを使用すると戻りコードで終了し、netcat
コンソールまたは端末に何も印刷されません。130
netcat
bash
最後のトラップはSIGINT
ハンドラをリセットします。
プロセスは成功を示すbash
戻りコードで終わります0
。
これを行う方法についてのアイデアはありますか?
答え1
これが必要なのかどうかはわかりませんが、netcatプロセスをバックグラウンドに(CTRL + Zを押す)と入力してstty raw -echo
プロセスを再開できます。今は大丈夫でしょう。