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; }
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 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.WriteByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.WriteString(_username); buf.WriteString(Util.getBytes("ssh-connection")); buf.WriteString(Util.getBytes("publickey")); buf.WriteByte((byte)0); buf.WriteString(Util.getBytes(identity.getAlgName())); buf.WriteString(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.ReadInt(); buf.ReadByte(); buf.ReadByte(); byte[] _message=buf.ReadString(); byte[] lang=buf.ReadString(); 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.WriteByte((byte)Session.SSH_MSG_USERAUTH_REQUEST); buf.WriteString(_username); buf.WriteString(Util.getBytes("ssh-connection")); buf.WriteString(Util.getBytes("publickey")); buf.WriteByte((byte)1); buf.WriteString(Util.getBytes(identity.getAlgName())); buf.WriteString(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.WriteString(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.ReadInt(); buf.ReadByte(); buf.ReadByte(); byte[] _message=buf.ReadString(); byte[] lang=buf.ReadString(); 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.ReadInt(); buf.ReadByte(); buf.ReadByte(); byte[] foo=buf.ReadString(); int partial_success=buf.ReadByte(); //System.out.println(Encoding.UTF8.GetString(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; }
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; }
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 = 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 (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; }