Duvida(s) c/ JSCH (ssh)

Pessoal, to c/ umas duvidas com o framework ssh JSch (http://www.jcraft.com/jsch/).

Seguinte, eu consegui usar o Exec.java deles e consegui conectar no servidor Linux via SSH e pegou td blz, mas preciso fazer adaptacoes p minha aplicacao e ai q comecaram os problemas, quem puder me ajudar…

  1. Aparece uma tela dizendo q n reconhece a atenticidade do servidor qnd eu digito o “login@ip_servidor”, queria tirar esse negocio p n avisar isso, mas n achei, alguem q ja tirou isso, poderia me falar como faco a alteracao. A tela eh essa:

  2. Eu queria tirar essa classe “MyUserInfo” p/ cuidar da senha com minhas JFrames personalizadas, mas n encontro metodo p setar password (ja q o pass eh setado nessa classe) ou algo semelhante, usei um metodo “setPassword(String)” mas deu um pau la e n logou. Alguem ja fez isso? Me ajuda ai…

Codigo do Exec.java p/ ajudar:

[code]package servidor;

import com.jcraft.jsch.;
import java.awt.
;
import javax.swing.;
import java.io.
;

public class Exec{

public static void main(String[] arg){

try{
  JSch jsch=new JSch();  

  String host=null;      
  host=JOptionPane.showInputDialog("Enter username@hostname",
                                     System.getProperty("user.name")+
                                     "@localhost"); 
  String user=host.substring(0, host.indexOf('@'));
  host=host.substring(host.indexOf('@')+1);

  Session session=jsch.getSession(user, host, 222);
  
  /*
  String xhost="127.0.0.1";
  int xport=0;
  String display=JOptionPane.showInputDialog("Enter display name", 
                                             xhost+":"+xport);
  xhost=display.substring(0, display.indexOf(':'));
  xport=Integer.parseInt(display.substring(display.indexOf(':')+1));
  session.setX11Host(xhost);
  session.setX11Port(xport+6000);
  */

  // username and password will be given via UserInfo interface.
  // gostaria de obter a senha c/ minhas JFrames personalizadas e tirar essa classe MyUserInfo
  UserInfo ui=new MyUserInfo();
  session.setUserInfo(ui);
  //session.setPassword("senha"); //nao ta pegando c/ esse metodo
  session.connect();

  String command=JOptionPane.showInputDialog("Enter command", 
                                             "set|grep SSH");

  Channel channel=session.openChannel("exec");
  ((ChannelExec)channel).setCommand(command);

  // X Forwarding
  // channel.setXForwarding(true);

  //channel.setInputStream(System.in);
  channel.setInputStream(null);

  //channel.setOutputStream(System.out);

  //FileOutputStream fos=new FileOutputStream("/tmp/stderr");
  //((ChannelExec)channel).setErrStream(fos);
  ((ChannelExec)channel).setErrStream(System.err);

  InputStream in=channel.getInputStream();

  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;
    }
    try{Thread.sleep(1000);}catch(Exception ee){}
  }
  channel.disconnect();
  session.disconnect();
}
catch(Exception e){
  System.out.println(e);
}

}

public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{
public String getPassword(){ return passwd; }
public boolean promptYesNo(String str){
Object[] options={ “yes”, “no” };
int foo=JOptionPane.showOptionDialog(null,
str,
“Warning”,
JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
return foo==0;
}

String passwd;
JTextField passwordField=(JTextField)new JPasswordField(20);

public String getPassphrase(){ return null; }
public boolean promptPassphrase(String message){ return true; }
public boolean promptPassword(String message){
  Object[] ob={passwordField}; 
  int result=
    JOptionPane.showConfirmDialog(null, ob, message,
                                  JOptionPane.OK_CANCEL_OPTION);
  if(result==JOptionPane.OK_OPTION){
    passwd=passwordField.getText();
    return true;
  }
  else{ 
    return false; 
  }
}
public void showMessage(String message){
  JOptionPane.showMessageDialog(null, message);
}
final GridBagConstraints gbc = 
  new GridBagConstraints(0,0,1,1,1,1,
                         GridBagConstraints.NORTHWEST,
                         GridBagConstraints.NONE,
                         new Insets(0,0,0,0),0,0);
private Container panel;
public String[] promptKeyboardInteractive(String destination,
                                          String name,
                                          String instruction,
                                          String[] prompt,
                                          boolean[] echo){
  panel = new JPanel();
  panel.setLayout(new GridBagLayout());

  gbc.weightx = 1.0;
  gbc.gridwidth = GridBagConstraints.REMAINDER;
  gbc.gridx = 0;
  panel.add(new JLabel(instruction), gbc);
  gbc.gridy++;

  gbc.gridwidth = GridBagConstraints.RELATIVE;

  JTextField[] texts=new JTextField[prompt.length];
  for(int i=0; i<prompt.length; i++){
    gbc.fill = GridBagConstraints.NONE;
    gbc.gridx = 0;
    gbc.weightx = 1;
    panel.add(new JLabel(prompt[i]),gbc);

    gbc.gridx = 1;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.weighty = 1;
    if(echo[i]){
      texts[i]=new JTextField(20);
    }
    else{
      texts[i]=new JPasswordField(20);
    }
    panel.add(texts[i], gbc);
    gbc.gridy++;
  }

  if(JOptionPane.showConfirmDialog(null, panel, 
                                   destination+": "+name,
                                   JOptionPane.OK_CANCEL_OPTION,
                                   JOptionPane.QUESTION_MESSAGE)
     ==JOptionPane.OK_OPTION){
    String[] response=new String[prompt.length];
    for(int i=0; i<prompt.length; i++){
      response[i]=texts[i].getText();
    }
return response;
  }
  else{
    return null;  // cancel
  }
}

}
}[/code]

Eu procurei por topicos relacionados no Guj, mas n obtive exito em me ajudar. Por enqto vo procurando…vlw…

Leia o fonte do JSCH, gere o JavaDoc, leia-o e acompanhe os exemplos através de um Debugger. E também estude sobre como fazer classes aninhadas (inner classes) e classes aninhadas anônimas (anônimous inner classes).

eu dei uma lida, so q convenhamos q nao eh tao facil sacar a logica, ou pelo menos n dar p sacar em 1 ou 2 hrs. se vc ou alguem utilizou a jsch e conseguiu tirar essa msg de inicio e personalizou a tela de login, poe o codigo ai, me ajudara bastante, por enqto vo procurando…

  1. so sobrescrever o metodo “promptYesNo()”
public boolean promptYesNo(String str){ return true; }
  1. setar senha antes da instancia do MyUserInfo c o metodo:
session.setPassword("senha");

resolvido, vlw…