JSchを使ってリモートのWindowsマシンにsshセッションを作成しました。 Windowsマシンには、リモートクライアントからのsshを受け入れるためにcygwinがインストールされています。私はコマンドを使用して実行可能なチャンネルを開設したコマンド、JSchの複数の実行可能なチャネルを同期させる方法は?
Channel channel = client_session.openChannel("exec");
を実行するために私は1つのチャンネルからマシンに共有ディレクトリをマッピングしています。同じチャネルを別のコマンドを実行するために使用することはできませんので、私はマップされたドライブを取得するために同じセッションの別のチャネルを使用しています。
しかし、私は以前にマップされたドライブ自体(私は以前、同じコードでマッピングされたもの)を取得しておりません。これら2つのチャンネルを同期させる方法。私が実行した後に得た出力がある
Channel channel = client_session.openChannel("exec");
((ChannelExec)channel).setCommand("net use Y: \\\\\\\\share\\\\directory /USER:WORKGROUP\\\\User password");
channel.connect();
channel = client_session.openChannel("exec");
((ChannelExec)channel).setCommand("net use");
channel.connect();
以下のように私が使用したコードはまた、私が必要とする前のコマンドの出力に基づいて、マッピングされたディレクトリに複数のコマンドを実行する必要があり、
The command completed successfully.
exit-status: 0
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
Unavailable Y: \\share\directory Microsoft Windows Network
The command completed successfully.
exit-status: 0
です同一のマッピングされたディレクトリでいくつかのコマンドを実行します。私はチャネルが同期している場合、複数のコマンドを実行している問題が解決されると思います。
public void method()
{
Channel channel = null;
try
{
channel = client_session.openChannel("exec");
((ChannelExec) channel).setCommand("net use Y: \\\\\\\\share\\\\directory /USER:WORKGROUP\\\\User password");
channel.connect();
byte[] tmp=new byte[1024];
while(true)
{
while(in.available()>0)
{
int i=in.read(tmp, 0, 1024);
if(i<0)
break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed())
{
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
}
}
catch (Exception e)
{
System.out.println(e.getStackTrace()[0].getLineNumber());
System.out.println(e.toString());
}
try
{
channel = client_session.openChannel("exec");
((ChannelExec)channel).setCommand("net use");
channel.connect();
byte[] tmp=new byte[1024];
while(true)
{
while(in.available()>0)
{
int i=in.read(tmp, 0, 1024);
if(i<0)
break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed())
{
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
}
}
catch(Exception e)
{
System.out.println(e.getStackTrace()[0].getLineNumber());
System.out.println(e.toString());
}
}
は、コマンドの実行を自動化するために使用されるものではありません。そして、それはまた、どの出力がどのような命令から来るのか、どのコマンドから来るのかを伝えるのが難しくなります。 –
を使用しない –