Java サーバーソケットと bash tcp パイプの間のパイプを開く方法があるかどうか疑問に思っていました。もしそうなら、あなたはこれをどのようにしますか。Javaサーバー側のセットアップ方法は知っていますが、bashまたはWindowsコマンドプロンプトを介してソケット接続を開くにはどうすればよいですか。基本的に、標準入力を tcp 接続にパイプし、そこから標準出力を受け取りたいと考えています。
どんな例でも感謝します!
-TJ
Java サーバーソケットと bash tcp パイプの間のパイプを開く方法があるかどうか疑問に思っていました。もしそうなら、あなたはこれをどのようにしますか。Javaサーバー側のセットアップ方法は知っていますが、bashまたはWindowsコマンドプロンプトを介してソケット接続を開くにはどうすればよいですか。基本的に、標準入力を tcp 接続にパイプし、そこから標準出力を受け取りたいと考えています。
どんな例でも感謝します!
-TJ
以下に例を示します。Connection、Session などのクラスがインポートで定義されています。当時、私たちは trilead SSH を使用していましたが、それが一般に公開されることはもうないと思いますが、Web 上には他にも多くのライブラリがあります (例: http://linuxmafia.com/ssh/java.html )。
つまり、(1) SSH セッションを確立し、(2) パスワード認証を行い、(3) ユーザーのログイン シェルでコマンドを実行し、(4) その標準出力を取得するために、serversocket を開く必要はありませんでした。ほとんどの SSH ライブラリでこの機能が提供されると思います。この助けを願っています - MS
public void runCommand (String uName, String pWord, String cmd) throws Exception {
Connection conn = new Connection ("localhost");
conn.connect();
boolean authenticated = conn.authenticateWithPassword (uName, pWord);
if (!authenticated)
throw new Exception ("Authentication failure");
Session sess = connection.openSession();
sess.execCommand (cmd);
BufferedReader br = new BufferedReader (new InputStreamReader (
new StreamGobbler (sess.getStdout())));
for (String s = br.readLine() ; s != null ; s = br.readLine()) {
// do stuff with s
}
br.close();
sess.close();
conn.close();
}
ServerSocket は、着信接続を受け入れ、エンドポイントとして使用する新しいソケットを作成することを期待して何もできません (送信または受信操作には ServerSocket を使用しません)。これは問題ありませんが、接続を受け入れる必要がある接続の側に注意してください。これはパイプを「所有」しているように見えるので、Bashになると思います。代わりにソケットを使用して接続します。
Netcatは通常、Unix シェルから TCP 接続を開くために使用されます。Bash (または私が知っている他のシェル) は直接サポートしていません。Netcat の Windows 版も存在するようですが、私は使っていません。
しかし、この場合は Java 側で特別な設定が必要ないため、SSH だけを使用する方がずっと良い考えです。無料の暗号化とオプションの圧縮を使用して、標準 I/O ストリームを SSH クライアントに自動的にリダイレクトするだけですssh -C) をおまけとして。欠点は、Java 側に SSH サーバーをインストールし、接続側に SSH クライアントをインストールする必要があることです。
SSH ツールのいずれかを使用します (ganymade など、多数のオープンソースがあります)。
http://java-source.net/open-source/network-clients/ganymed-ssh-2-for-java
私はこの特定のものを使用していませんが、他の ssh クライアントを使用して必要なことを行います。
PS: これには本当に ServerSocket は必要ありませんが、スレッドを使用すると便利です。