Created
April 7, 2015 11:26
-
-
Save bmcculley/48cd6469ce08ae4f0cc9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ | |
import com.jcraft.jsch.*; | |
import java.awt.*; | |
import javax.swing.*; | |
import java.io.*; | |
import java.util.Scanner; | |
public class cmdExec{ | |
public static void main(String[] arg){ | |
try{ | |
JSch jsch=new JSch(); | |
String host=null; | |
if(arg.length>0){ | |
host=arg[0]; | |
} | |
else{ | |
System.out.println("Enter user@host:"); | |
Scanner scnUserHost = new Scanner(System.in); | |
host = scnUserHost.nextLine(); | |
} | |
String user=host.substring(0, host.indexOf('@')); | |
host=host.substring(host.indexOf('@')+1); | |
Session session=jsch.getSession(user, host, 22); | |
System.out.println("Enter password:"); | |
Scanner scnUserPass = new Scanner(System.in); | |
String paswrd = scnUserPass.nextLine(); | |
session.setPassword(paswrd); | |
// username and password will be given via UserInfo interface. | |
UserInfo ui=new MyUserInfo(); | |
session.setUserInfo(ui); | |
session.connect(); | |
boolean keepGoing = true; | |
while (keepGoing){ | |
Scanner cmdIn = new Scanner(System.in); | |
System.out.println("Enter command"); | |
String command = cmdIn.nextLine(); | |
Channel channel=session.openChannel("exec"); | |
((ChannelExec)channel).setCommand(command); | |
channel.setInputStream(null); | |
((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; | |
// grab the return, hopefully a number | |
String strRet = new String(tmp, 0, i); | |
// trim whitespace and convert to int | |
int ret = Integer.parseInt(strRet.trim()); | |
System.out.print(ret); | |
} | |
if(channel.isClosed()){ | |
if(in.available()>0) continue; | |
//System.out.println("exit-status: "+channel.getExitStatus()); | |
break; | |
} | |
try{Thread.sleep(1000);}catch(Exception ee){} | |
} | |
channel.disconnect(); | |
Scanner kgIn = new Scanner(System.in); | |
System.out.println("Keep running commands? [y/n]"); | |
String kgStr = kgIn.nextLine(); | |
if (kgStr.equals("y") || kgStr == "y") { | |
keepGoing = true; | |
} | |
else { | |
keepGoing = false; | |
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 | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment