00001 using System;
00002 using Tamir.SharpSsh.jsch;
00003 using System.Text;
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 namespace Tamir.SharpSsh
00036 {
00040 public class SshExec : SshBase
00041 {
00042 public SshExec(string host, string user, string password)
00043 : base(host, user, password)
00044 {
00045 }
00046
00047 public SshExec(string host, string user)
00048 : base(host, user)
00049 {
00050 }
00051
00052 protected override string ChannelType
00053 {
00054 get { return "exec"; }
00055 }
00056
00061 protected override void ConnectChannel()
00062 {
00063 }
00064
00065 protected ChannelExec GetChannelExec(string command)
00066 {
00067 ChannelExec exeChannel = (ChannelExec)m_session.openChannel("exec");
00068 exeChannel.setCommand(command);
00069 return exeChannel;
00070 }
00071
00072 public string RunCommand(string command)
00073 {
00074 m_channel = GetChannelExec(command);
00075 System.IO.Stream s = m_channel.getInputStream();
00076 m_channel.connect();
00077 byte[] buff = new byte[1024];
00078 StringBuilder res = new StringBuilder();
00079 int c = 0;
00080 while(true)
00081 {
00082 c = s.Read(buff, 0, buff.Length);
00083 if(c==-1) break;
00084 res.Append( Encoding.ASCII.GetString(buff, 0, c) );
00085
00086 }
00087 m_channel.disconnect();
00088 return res.ToString();
00089 }
00090
00091 public int RunCommand(string command, ref string StdOut, ref string StdErr)
00092 {
00093 StdOut = "";
00094 StdErr = "";
00095 m_channel = GetChannelExec(command);
00096 System.IO.Stream stdout = m_channel.getInputStream();
00097 System.IO.Stream stderr = ((ChannelExec)m_channel).getErrStream();
00098 m_channel.connect();
00099 byte[] buff = new byte[1024];
00100 StringBuilder sbStdOut = new StringBuilder();
00101 StringBuilder sbStdErr = new StringBuilder();
00102 int o=0; int e=0;
00103 while(true)
00104 {
00105 if(o!=-1) o = stdout.Read(buff, 0, buff.Length);
00106 if(o!=-1) StdOut += sbStdOut.Append(Encoding.ASCII.GetString(buff, 0, o));
00107 if(e!=-1) e = stderr.Read(buff, 0, buff.Length);
00108 if(e!=-1) StdErr += sbStdErr.Append(Encoding.ASCII.GetString(buff, 0, e));
00109 if((o==-1)&&(e==-1)) break;
00110 }
00111 m_channel.disconnect();
00112
00113 return m_channel.getExitStatus();
00114 }
00115
00116 public ChannelExec ChannelExec
00117 {
00118 get{return (ChannelExec)this.m_channel;}
00119 }
00120 }
00121 }