public void request(Session session, Channel channel) { Buffer buf=new Buffer(); Packet packet=new Packet(buf); bool reply=waitForReply(); if(reply) { channel.reply=-1; } packet.reset(); buf.putByte((byte)Session.SSH_MSG_CHANNEL_REQUEST); buf.putInt(channel.getRecipient()); buf.putString(Util.getBytes("subsystem")); buf.putByte((byte)(waitForReply() ? 1 : 0)); buf.putString(Util.getBytes("sftp")); session.write(packet); if(reply) { while(channel.reply==-1) { try{System.Threading.Thread.Sleep(10);} catch//(Exception ee) { } } if(channel.reply==0) { throw new JSchException("failed to send sftp request"); } } }
public void request(Session session, Channel channel) { Buffer buf=new Buffer(); Packet packet=new Packet(buf); packet.reset(); buf.putByte((byte) Session.SSH_MSG_CHANNEL_REQUEST); buf.putInt(channel.getRecipient()); buf.putString( Util.getBytes("signal")); buf.putByte((byte)(waitForReply() ? 1 : 0)); buf.putString(Util.getBytes(signal)); session.write(packet); }
public void request(Session session, Channel channel) { Buffer buf=new Buffer(); Packet packet=new Packet(buf); // send // byte SSH_MSG_CHANNEL_REQUEST(98) // uint32 recipient channel // string request type // "shell" // boolean want reply // 0 packet.reset(); buf.putByte((byte) Session.SSH_MSG_CHANNEL_REQUEST); buf.putInt(channel.getRecipient()); buf.putString(Util.getBytes("shell")); buf.putByte((byte)(waitForReply() ? 1 : 0)); session.write(packet); }
//private byte[] f; public override void init(Session session, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C) { this.session=session; this.V_S=V_S; this.V_C=V_C; this.I_S=I_S; this.I_C=I_C; // sha=new SHA1(); // sha.init(); try { Type t=Type.GetType(session.getConfig("sha-1")); sha=(HASH)(Activator.CreateInstance(t)); sha.init(); } catch(Exception e) { Console.WriteLine(e); } buf=new Buffer(); packet=new Packet(buf); try { Type t=Type.GetType(session.getConfig("dh")); dh=(DH)(Activator.CreateInstance(t)); dh.init(); } catch(Exception e) { throw e; } packet.reset(); buf.putByte((byte)0x22); buf.putInt(min); buf.putInt(preferred); buf.putInt(max); session.write(packet); state=SSH_MSG_KEX_DH_GEX_GROUP; }
public void request(Session session, Channel channel) { Packet packet=session.packet; Buffer buf=session.buf; // send // byte SSH_MSG_CHANNEL_REQUEST(98) // uint32 recipient channel // string request type // "exec" // boolean want reply // 0 // string command packet.reset(); buf.putByte((byte) Session.SSH_MSG_CHANNEL_REQUEST); buf.putInt(channel.getRecipient()); buf.putString(new Str("exec").getBytes()); buf.putByte((byte)(waitForReply() ? 1 : 0)); buf.putString(new Str(command).getBytes()); session.write(packet); }
public virtual bool start(Session session) { Packet packet=session.packet; Buffer buf=session.buf; // send // byte SSH_MSG_SERVICE_REQUEST(5) // string service name "ssh-userauth" packet.reset(); buf.putByte((byte)Session.SSH_MSG_SERVICE_REQUEST); buf.putString(Util.getBytes("ssh-userauth")); session.write(packet); // receive // byte SSH_MSG_SERVICE_ACCEPT(6) // string service name buf=session.read(buf); //System.out.println("read: 6 ? "+buf.buffer[5]); return buf.buffer[5]==6; }
internal PortWatcher(Session session, String address, int lport, String host, int rport, ServerSocketFactory factory) { this.session=session; this.lport=lport; this.host=host; this.rport=rport; try { boundaddress=InetAddress.getByName(address); ss=(factory==null) ? new ServerSocket(lport, 0, boundaddress) : factory.createServerSocket(lport, 0, boundaddress); } catch(Exception e) { Console.WriteLine(e); throw new JSchException("PortForwardingL: local port "+address+":"+lport+" cannot be bound."); } }
public void request(Session session, Channel channel) { Buffer buf=new Buffer(); Packet packet=new Packet(buf); //byte SSH_MSG_CHANNEL_REQUEST //uint32 recipient_channel //string "window-change" //boolean FALSE //uint32 terminal width, columns //uint32 terminal height, rows //uint32 terminal width, pixels //uint32 terminal height, pixels packet.reset(); buf.putByte((byte) Session.SSH_MSG_CHANNEL_REQUEST); buf.putInt(channel.getRecipient()); buf.putString(Util.getBytes("window-change")); buf.putByte((byte)(waitForReply() ? 1 : 0)); buf.putInt(width_columns); buf.putInt(height_rows); buf.putInt(width_pixels); buf.putInt(height_pixels); session.write(packet); }
public void request(Session session, Channel channel) { Buffer buf=new Buffer(); Packet packet=new Packet(buf); // byte SSH_MSG_CHANNEL_REQUEST(98) // uint32 recipient channel // string request type // "x11-req" // boolean want reply // 0 // boolean single connection // string x11 authentication protocol // "MIT-MAGIC-COOKIE-1". // string x11 authentication cookie // uint32 x11 screen number packet.reset(); buf.putByte((byte) Session.SSH_MSG_CHANNEL_REQUEST); buf.putInt(channel.getRecipient()); buf.putString(Util.getBytes("x11-req")); buf.putByte((byte)(waitForReply() ? 1 : 0)); buf.putByte((byte)0); buf.putString(Util.getBytes("MIT-MAGIC-COOKIE-1")); buf.putString(ChannelX11.getFakedCookie(session)); buf.putInt(0); session.write(packet); }
internal static byte[] getFakedCookie(Session session) { lock(faked_cookie_hex_pool) { byte[] foo=(byte[])faked_cookie_hex_pool[session]; if(foo==null) { Random random=Session.random; foo=new byte[16]; lock(random) { random.fill(foo, 0, 16); } /* System.out.print("faked_cookie: "); for(int i=0; i<foo.length; i++){ System.out.print(Integer.toHexString(foo[i]&0xff)+":"); } System.out.println(""); */ faked_cookie_pool.Add(session, foo); byte[] bar=new byte[32]; for(int i=0; i<16; i++) { bar[2*i]=table[(foo[i]>>4)&0xf]; bar[2*i+1]=table[(foo[i])&0xf]; } faked_cookie_hex_pool.Add(session, bar); foo=bar; } return foo; } }
public void request(Session session, Channel channel, String subsystem, bool want_reply) { this.subsystem=subsystem; this.want_reply=want_reply; this.request(session, channel); }
internal static String[] getPortForwarding(Session session) { java.util.Vector foo=new java.util.Vector(); lock(pool) { for(int i=0; i<pool.size(); i++) { PortWatcher p=(PortWatcher)(pool.elementAt(i)); if(p.session==session) { foo.addElement(p.lport+":"+p.host+":"+p.rport); } } } String[] bar=new String[foo.size()]; for(int i=0; i<foo.size(); i++) { bar[i]=(String)(foo.elementAt(i)); } return bar; }
internal static PortWatcher getPort(Session session, String address, int lport) { InetAddress addr; try { addr=InetAddress.getByName(address); } catch(Exception uhe) { throw new JSchException("PortForwardingL: invalid address "+address+" specified."); } lock(pool) { for(int i=0; i<pool.size(); i++) { PortWatcher p=(PortWatcher)(pool.elementAt(i)); if(p.session==session && p.lport==lport) { if(p.boundaddress.isAnyLocalAddress() || p.boundaddress.equals(addr)) return p; } } return null; } }
byte[] getSignature_rsa(Session session, byte[] data) { try { Type t=Type.GetType(jsch.getConfig("signature.rsa")); SignatureRSA rsa=(SignatureRSA)Activator.CreateInstance(t); rsa.init(); rsa.setPrvKey(e_array, n_array, d_array, p_array, q_array, dmp1_array, dmq1_array, iqmp_array); /* byte[] goo=new byte[4]; goo[0]=(byte)(session.getSessionId().Length>>>24); goo[1]=(byte)(session.getSessionId().Length>>>16); goo[2]=(byte)(session.getSessionId().Length>>>8); goo[3]=(byte)(session.getSessionId().Length); rsa.update(goo); rsa.update(session.getSessionId()); */ rsa.update(data); byte[] sig = rsa.sign(); Buffer buf=new Buffer("ssh-rsa".Length+4+ sig.Length+4); buf.putString( System.Text.Encoding.Default.GetBytes( "ssh-rsa" )); buf.putString(sig); return buf.buffer; } catch(Exception e) { Console.WriteLine(e); } return null; }
internal virtual void setSession(Session session) { this.session=session; }
public abstract void init(Session session, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C);
public override bool start(Session session) { //System.out.println("UserAuthKeyboardInteractive: start"); Packet packet=session.packet; Buffer buf=session.buf; String username=session.username; String dest=username+"@"+session.host; if(session.port!=22){ dest+=(":"+session.port); } bool cancel=false; byte[] _username=null; try{ _username=System.Text.Encoding.UTF8.GetBytes(username); } catch{ _username=Util.getBytes(username); } while(true){ // send // byte SSH_MSG_USERAUTH_REQUEST(50) // string user name (ISO-10646 UTF-8, as defined in [RFC-2279]) // string service name (US-ASCII) "ssh-userauth" ? "ssh-connection" // string "keyboard-interactive" (US-ASCII) // string language tag (as defined in [RFC-3066]) // string submethods (ISO-10646 UTF-8) packet.reset(); buf.putByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); buf.putString(Util.getBytes("ssh-connection")); //buf.putString("ssh-userauth".getBytes()); buf.putString(Util.getBytes("keyboard-interactive")); buf.putString(Util.getBytes("")); buf.putString(Util.getBytes("")); session.write(packet); bool firsttime=true; loop: while(true){ // receive // byte SSH_MSG_USERAUTH_SUCCESS(52) // string service name try{ buf=session.read(buf); } catch(JSchException e){ e.GetType(); return false; } catch(System.IO.IOException e){ e.GetType(); return false; } //System.out.println("read: 52 ? "+ buf.buffer[5]); if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_SUCCESS){ return true; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_BANNER){ buf.getInt(); buf.getByte(); buf.getByte(); byte[] _message=buf.getString(); byte[] lang=buf.getString(); String message=null; try{ message=Util.getStringUTF8(_message); } catch{ message=Util.getString(_message); } if(userinfo!=null){ userinfo.showMessage(message); } goto loop; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_FAILURE){ buf.getInt(); buf.getByte(); buf.getByte(); byte[] foo=buf.getString(); int partial_success=buf.getByte(); // System.out.println(new String(foo)+ // " partial_success:"+(partial_success!=0)); if(partial_success!=0){ throw new JSchPartialAuthException(Util.getString(foo)); } if(firsttime){ throw new JSchException("USERAUTH KI is not supported"); //return false; //cancel=true; // ?? } break; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_INFO_REQUEST){ firsttime=false; buf.getInt(); buf.getByte(); buf.getByte(); String name=Util.getString(buf.getString()); String instruction=Util.getString(buf.getString()); String languate_tag=Util.getString(buf.getString()); int num=buf.getInt(); //System.out.println("name: "+name); //System.out.println("instruction: "+instruction); //System.out.println("lang: "+languate_tag); //System.out.println("num: "+num); String[] prompt=new String[num]; bool[] echo=new bool[num]; for(int i=0; i<num; i++){ prompt[i]=Util.getString(buf.getString()); echo[i]=(buf.getByte()!=0); //System.out.println(" "+prompt[i]+","+echo[i]); } String[] response=null; if(num>0 ||(name.Length>0 || instruction.Length>0) ){ UIKeyboardInteractive kbi=(UIKeyboardInteractive)userinfo; if(userinfo!=null){ response=kbi.promptKeyboardInteractive(dest, name, instruction, prompt, echo); } } // byte SSH_MSG_USERAUTH_INFO_RESPONSE(61) // int num-responses // string response[1] (ISO-10646 UTF-8) // ... // string response[num-responses] (ISO-10646 UTF-8) //if(response!=null) //System.out.println("response.length="+response.length); //else //System.out.println("response is null"); packet.reset(); buf.putByte((byte)Session.SSH_MSG_USERAUTH_INFO_RESPONSE); if(num>0 && (response==null || // cancel num!=response.Length)){ buf.putInt(0); if(response==null) cancel=true; } else{ buf.putInt(num); for(int i=0; i<num; i++){ //System.out.println("response: |"+response[i]+"| <- replace here with **** if you need"); buf.putString(Util.getBytes(response[i])); } } session.write(packet); if(cancel) break; //System.out.println("continue loop"); goto loop; } //throw new JSchException("USERAUTH fail ("+buf.buffer[5]+")"); return false; } if(cancel){ throw new JSchAuthCancelException("keyboard-interactive"); //break; } } //return false; }
public override bool start(Session session) { base.start(session); //System.out.println("UserAuthNone: start"); Packet packet=session.packet; Buffer buf=session.buf; String username=session.username; byte[] _username=null; try{ _username=Util.getBytesUTF8(username); } catch {//(java.io.UnsupportedEncodingException e){ _username=Util.getBytes(username); } // send // byte SSH_MSG_USERAUTH_REQUEST(50) // string user name // string service name ("ssh-connection") // string "none" packet.reset(); buf.putByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); buf.putString(Util.getBytes("ssh-connection")); buf.putString(Util.getBytes("none")); session.write(packet); loop: while(true) { // receive // byte SSH_MSG_USERAUTH_SUCCESS(52) // string service name buf=session.read(buf); //System.out.println("UserAuthNone: read: 52 ? "+ buf.buffer[5]); if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_SUCCESS) { return true; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_BANNER) { buf.getInt(); buf.getByte(); buf.getByte(); byte[] _message=buf.getString(); byte[] lang=buf.getString(); String message=null; try{ message=Util.getStringUTF8(_message); } catch {//(java.io.UnsupportedEncodingException e){ message=Util.getString(_message); } if(userinfo!=null) { userinfo.showMessage(message); } goto loop; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_FAILURE) { buf.getInt(); buf.getByte(); buf.getByte(); byte[] foo=buf.getString(); int partial_success=buf.getByte(); methods=Util.getString(foo); //System.out.println("UserAuthNONE: "+methods+ // " partial_success:"+(partial_success!=0)); // if(partial_success!=0){ // throw new JSchPartialAuthException(new String(foo)); // } break; } else { // System.out.println("USERAUTH fail ("+buf.buffer[5]+")"); throw new JSchException("USERAUTH fail ("+buf.buffer[5]+")"); } } //throw new JSchException("USERAUTH fail"); return false; }
public byte[] getSignature(Session session, byte[] data) { if(type==RSA) return getSignature_rsa(session, data); return getSignature_dss(session, data); }
public override bool start(Session session) { // super.start(session); //System.out.println("UserAuthPassword: start"); Packet packet=session.packet; Buffer buf=session.buf; String username=session.username; String password=session.password; String dest=username+"@"+session.host; if(session.port!=22){ dest+=(":"+session.port); } while(true){ if(password==null){ if(userinfo==null){ //throw new JSchException("USERAUTH fail"); return false; } if(!userinfo.promptPassword("Password for "+dest)){ throw new JSchAuthCancelException("password"); //break; } password=userinfo.getPassword(); if(password==null){ throw new JSchAuthCancelException("password"); //break; } } byte[] _username=null; try{ _username=Util.getBytesUTF8(username); } catch{//(java.io.UnsupportedEncodingException e){ _username=Util.getBytes(username); } byte[] _password=null; try{ _password=Util.getBytesUTF8(password); } catch{//(java.io.UnsupportedEncodingException e){ _password=Util.getBytes(password); } // send // byte SSH_MSG_USERAUTH_REQUEST(50) // string user name // string service name ("ssh-connection") // string "password" // boolen FALSE // string plaintext password (ISO-10646 UTF-8) packet.reset(); buf.putByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); buf.putString(Util.getBytes("ssh-connection")); buf.putString(Util.getBytes("password")); buf.putByte((byte)0); buf.putString(_password); session.write(packet); loop: while(true){ // receive // byte SSH_MSG_USERAUTH_SUCCESS(52) // string service name buf=session.read(buf); //System.out.println("read: 52 ? "+ buf.buffer[5]); if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_SUCCESS){ return true; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_BANNER){ buf.getInt(); buf.getByte(); buf.getByte(); byte[] _message=buf.getString(); byte[] lang=buf.getString(); String message=null; try{ message=Util.getStringUTF8(_message); } catch{//(java.io.UnsupportedEncodingException e){ message=Util.getString(_message); } if(userinfo!=null){ userinfo.showMessage(message); } goto loop; } if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_FAILURE){ buf.getInt(); buf.getByte(); buf.getByte(); byte[] foo=buf.getString(); int partial_success=buf.getByte(); //System.out.println(new String(foo)+ // " partial_success:"+(partial_success!=0)); if(partial_success!=0){ throw new JSchPartialAuthException(Util.getString(foo)); } break; } else{ // System.out.println("USERAUTH fail ("+buf.buffer[5]+")"); // throw new JSchException("USERAUTH fail ("+buf.buffer[5]+")"); return false; } } password=null; } //throw new JSchException("USERAUTH fail"); //return false; }
internal static void disconnect(Session session) { Channel[] channels=null; int count=0; lock(pool) { channels=new Channel[pool.size()]; for(int i=0; i<pool.size(); i++) { try { Channel c=((Channel)(pool.elementAt(i))); if(c.session==session) { channels[count++]=c; } } catch(Exception e) { } } } for(int i=0; i<count; i++) { channels[i].disconnect(); } }
protected virtual void ConnectSession(int tcpPort, int connectTimeout) { m_session = m_jsch.getSession(m_user, m_host, tcpPort); if (Password != null) m_session.setUserInfo(new KeyboardInteractiveUserInfo(Password)); Hashtable config = new Hashtable(); config.Add("StrictHostKeyChecking", "no"); m_session.setConfig(config); m_session.connect(connectTimeout); }
internal static Channel getChannel(int id, Session session) { lock(pool) { for(int i=0; i<pool.size(); i++) { Channel c=(Channel)(pool.elementAt(i)); if(c.id==id && c.session==session) return c; } } return null; }
internal static void delPort(Session session) { lock(pool) { PortWatcher[] foo=new PortWatcher[pool.size()]; int count=0; for(int i=0; i<pool.size(); i++) { PortWatcher p=(PortWatcher)(pool.elementAt(i)); if(p.session==session) { p.delete(); foo[count++]=p; } } for(int i=0; i<count; i++) { PortWatcher p=foo[i]; pool.removeElement(p); } } }
public override bool start(Session session) { //super.start(session); //Vector identities=JSch.identities; System.Collections.ArrayList identities=session.jsch.identities; Packet packet=session.packet; Buffer buf=session.buf; String passphrase=null; String username=session.username; byte[] _username=null; try{ _username= Util.getBytesUTF8( username); } catch {//(java.io.UnsupportedEncodingException e){ _username=Util.getBytes(username); } for(int i=0; i<identities.Count; i++) { Identity identity=(Identity)(identities[i]); byte[] pubkeyblob=identity.getPublicKeyBlob(); //System.out.println("UserAuthPublicKey: "+identity+" "+pubkeyblob); if(pubkeyblob!=null) { // send // byte SSH_MSG_USERAUTH_REQUEST(50) // string user name // string service name ("ssh-connection") // string "publickey" // boolen FALSE // string plaintext password (ISO-10646 UTF-8) packet.reset(); buf.putByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); buf.putString(Util.getBytes("ssh-connection")); buf.putString(Util.getBytes("publickey")); buf.putByte((byte)0); buf.putString(Util.getBytes(identity.getAlgName())); buf.putString(pubkeyblob); session.write(packet); loop1: while(true) { // receive // byte SSH_MSG_USERAUTH_PK_OK(52) // string service name buf=session.read(buf); //System.out.println("read: 60 ? "+ buf.buffer[5]); if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_PK_OK) { break; } else if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_FAILURE) { // System.out.println("USERAUTH publickey "+session.getIdentity()+ // " is not acceptable."); break; } else if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_BANNER) { buf.getInt(); buf.getByte(); buf.getByte(); byte[] _message=buf.getString(); byte[] lang=buf.getString(); String message=null; try{ message=Util.getStringUTF8(_message); } catch {//(java.io.UnsupportedEncodingException e){ message=Util.getString(_message); } if(userinfo!=null) { userinfo.showMessage(message); } goto loop1; } else { //System.out.println("USERAUTH fail ("+buf.buffer[5]+")"); //throw new JSchException("USERAUTH fail ("+buf.buffer[5]+")"); break; } } if(buf.buffer[5]!=Session.SSH_MSG_USERAUTH_PK_OK) { continue; } } //System.out.println("UserAuthPublicKey: identity.isEncrypted()="+identity.isEncrypted()); int count=5; while(true) { if((identity.isEncrypted() && passphrase==null)) { if(userinfo==null) throw new JSchException("USERAUTH fail"); if(identity.isEncrypted() && !userinfo.promptPassphrase("Passphrase for "+identity.getName())) { throw new JSchAuthCancelException("publickey"); //throw new JSchException("USERAUTH cancel"); //break; } passphrase=userinfo.getPassphrase(); } if(!identity.isEncrypted() || passphrase!=null) { //System.out.println("UserAuthPublicKey: @1 "+passphrase); if(identity.setPassphrase(passphrase)) break; } passphrase=null; count--; if(count==0)break; } //System.out.println("UserAuthPublicKey: identity.isEncrypted()="+identity.isEncrypted()); if(identity.isEncrypted()) continue; if(pubkeyblob==null) pubkeyblob=identity.getPublicKeyBlob(); //System.out.println("UserAuthPublicKey: pubkeyblob="+pubkeyblob); if(pubkeyblob==null) continue; // send // byte SSH_MSG_USERAUTH_REQUEST(50) // string user name // string service name ("ssh-connection") // string "publickey" // boolen TRUE // string plaintext password (ISO-10646 UTF-8) packet.reset(); buf.putByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.putString(_username); buf.putString(Util.getBytes("ssh-connection")); buf.putString(Util.getBytes("publickey")); buf.putByte((byte)1); buf.putString(Util.getBytes(identity.getAlgName())); buf.putString(pubkeyblob); // byte[] tmp=new byte[buf.index-5]; // System.arraycopy(buf.buffer, 5, tmp, 0, tmp.length); // buf.putString(signature); byte[] sid=session.getSessionId(); uint sidlen=(uint)sid.Length; byte[] tmp=new byte[4+sidlen+buf.index-5]; tmp[0]=(byte)(sidlen>>24); tmp[1]=(byte)(sidlen>>16); tmp[2]=(byte)(sidlen>>8); tmp[3]=(byte)(sidlen); Array.Copy(sid, 0, tmp, 4, sidlen); Array.Copy(buf.buffer, 5, tmp, 4+sidlen, buf.index-5); byte[] signature=identity.getSignature(session, tmp); if(signature==null) { // for example, too long key length. break; } buf.putString(signature); session.write(packet); loop2: while(true) { // receive // byte SSH_MSG_USERAUTH_SUCCESS(52) // string service name buf=session.read(buf); //System.out.println("read: 52 ? "+ buf.buffer[5]); if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_SUCCESS) { return true; } else if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_BANNER) { buf.getInt(); buf.getByte(); buf.getByte(); byte[] _message=buf.getString(); byte[] lang=buf.getString(); String message=null; try{ message=Util.getStringUTF8(_message); } catch {//(java.io.UnsupportedEncodingException e){ message=Util.getString(_message); } if(userinfo!=null) { userinfo.showMessage(message); } goto loop2; } else if(buf.buffer[5]==Session.SSH_MSG_USERAUTH_FAILURE) { buf.getInt(); buf.getByte(); buf.getByte(); byte[] foo=buf.getString(); int partial_success=buf.getByte(); //System.out.println(new String(foo)+ // " partial_success:"+(partial_success!=0)); if(partial_success!=0) { throw new JSchPartialAuthException(Util.getString(foo)); } break; } //System.out.println("USERAUTH fail ("+buf.buffer[5]+")"); //throw new JSchException("USERAUTH fail ("+buf.buffer[5]+")"); break; } } return false; }
byte[] getSignature_dss(Session session, byte[] data) { /* byte[] foo; int i; System.out.print("P "); foo=P_array; for(i=0; i<foo.Length; i++){ System.out.print(Integer.toHexString(foo[i]&0xff)+":"); } System.out.println(""); System.out.print("Q "); foo=Q_array; for(i=0; i<foo.Length; i++){ System.out.print(Integer.toHexString(foo[i]&0xff)+":"); } System.out.println(""); System.out.print("G "); foo=G_array; for(i=0; i<foo.Length; i++){ System.out.print(Integer.toHexString(foo[i]&0xff)+":"); } System.out.println(""); */ try { Type t=Type.GetType(jsch.getConfig("signature.dss")); SignatureDSA dsa=(SignatureDSA)(Activator.CreateInstance(t)); dsa.init(); dsa.setPrvKey(prv_array, P_array, Q_array, G_array); /* byte[] goo=new byte[4]; goo[0]=(byte)(session.getSessionId().Length>>>24); goo[1]=(byte)(session.getSessionId().Length>>>16); goo[2]=(byte)(session.getSessionId().Length>>>8); goo[3]=(byte)(session.getSessionId().Length); dsa.update(goo); dsa.update(session.getSessionId()); */ dsa.update(data); byte[] sig = dsa.sign(); Buffer buf=new Buffer("ssh-dss".Length+4+ sig.Length+4); buf.putString( System.Text.Encoding.Default.GetBytes( "ssh-dss" ) ); buf.putString(sig); return buf.buffer; } catch(Exception e) { Console.WriteLine("e "+e); } return null; }
public override void init(Session session, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C) { this.session=session; this.V_S=V_S; this.V_C=V_C; this.I_S=I_S; this.I_C=I_C; // sha=new SHA1(); // sha.init(); try { Type t=Type.GetType(session.getConfig("sha-1")); sha=(HASH)(Activator.CreateInstance(t)); sha.init(); } catch(Exception ee) { Console.WriteLine(ee); } buf=new Buffer(); packet=new Packet(buf); try { Type t=Type.GetType(session.getConfig("dh")); dh=(DH)(Activator.CreateInstance(t)); dh.init(); } catch(Exception ee) { throw ee; } dh.setP(p); dh.setG(g); // The client responds with: // byte SSH_MSG_KEXDH_INIT(30) // mpint e <- g^x mod p // x is a random number (1 < x < (p-1)/2) e=dh.getE(); packet.reset(); buf.putByte((byte)SSH_MSG_KEXDH_INIT); buf.putMPInt(e); session.write(packet); state=SSH_MSG_KEXDH_REPLY; }
internal static PortWatcher addPort(Session session, String address, int lport, String host, int rport, ServerSocketFactory ssf) { if(getPort(session, address, lport)!=null) { throw new JSchException("PortForwardingL: local port "+ address+":"+lport+" is already registered."); } PortWatcher pw=new PortWatcher(session, address, lport, host, rport, ssf); pool.addElement(pw); return pw; }
internal static void delPort(Session session, String address, int lport) { PortWatcher pw=getPort(session, address, lport); if(pw==null) { throw new JSchException("PortForwardingL: local port "+address+":"+lport+" is not registered."); } pw.delete(); pool.removeElement(pw); }
/// <summary> /// Closes the SSH subsystem /// </summary> public virtual void Close() { if (m_channel != null) { m_channel.disconnect(); m_channel = null; } if (m_session != null) { m_session.disconnect(); m_session = null; } }