皆さんこんにちは。
<enter>~C
最近、次のようなエスケープ シーケンスを使用して、リモート SSH 接続からローカル ワークステーションにコマンドを送り返すことができることに気付きました。
[root@host ~]#
[root@host ~]#
ssh> !ip ad
さて、私は、bash スクリプトを使用して、ローカル ワークステーションでコマンドを自動的に実行したり、他の操作を実行したりできるようにしたいのですが、プログラムでこのシェルにコマンドを送り返す方法を見つけることができませんでした。また、それを尋ねたり試したりした人も見つかりませんでした。明確に言うと、私は SSH 経由でリモート サーバーにコマンドを送信しようとしているのではなく、クライアントを介して SSH 接続からワークステーションにコマンドを送り返そうとしています (上図を参照)。
どなたか何か提案ややり方を知っている方がいらっしゃいましたら、ご協力いただければ大変ありがたく思います。ありがとうございます!
答え1
エスケープ文字がリモート システムの Bash に届かないため、これは不可能だと思います。リモート bash がエスケープ文字を設定する前に、ローカル SSH クライアントによって傍受されます。
これはあなたが求めていたものではなく、状況によっては実現可能ではないかもしれませんが、別の解決策で目的を達成できるかもしれません。
リモート マシンから SSH でローカル マシンに再度接続して、ローカル マシンでコマンドを実行します。
[root@remote-host ~]# ssh your-local-machine ip ad
答え2
セキュリティ上の懸念があるため、SSH 接続内で遠隔ホストからローカル コマンドを実行することはできません。
コマンドを渡すために接続をエスケープする方法は、ターミナル、つまりローカル サーバー経由です。
したがって、SSH 接続を介して接続とスクリプトの両方を実行したい場合は、expect を検討してみてください。ただし、リモート シェルから直接ではなく、別のアプリケーションで SSH 接続を埋め込んだりラップしたりすることによって実行されます。