package ssh;
import com.jcraft.jsch.*;
import java.awt.*;
import javax.swing.*;
import log.Logger;
import log.Logger.OutputType;
public class NovaClient {
public static final String nova = "nova.cs.tau.ac.il";
protected Session mSession = null;
public static void main(String[] args) {
new NovaClient(true);
}
public NovaClient(boolean redirectIO) {
try {
JSch jsch = new JSch();
String user = JOptionPane.showInputDialog(null, "Enter nova username:", nova + " username", JOptionPane.QUESTION_MESSAGE);
mSession = jsch.getSession(user, nova, 22);
UserInfo ui = new MyUserInfo();
mSession.setUserInfo(ui);
mSession.connect();
if (redirectIO) {
Channel channel = null;
channel = mSession.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
}
} catch (Exception e) {
Logger.println("Failed to connect to " + nova, OutputType.ERROR);
}
}
public void close() {
mSession.disconnect();
}
public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
public String getPassword() {
return password;
}
public boolean promptYesNo(String str) {
/* choose whether to authorize this unknown host or not
Object[] options = {"yes", "no"};
int foo = JOptionPane.showOptionDialog(null, str, "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
return foo == 0;
*/
return true;
}
String password;
JTextField passwordField = (JTextField) new JPasswordField(20);
public String getPassphrase() {
return null;
}
public boolean promptPassphrase(String message) {
return false;
}
public boolean promptPassword(String message) {
Object[] ob = {passwordField};
int result = JOptionPane.showConfirmDialog(null, ob, message, JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
password = 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
}
}
}
}
|