Hi Jsch-users,
I am using Jsch for file transfer using SCP with my Java based Web
application.
Below is the ScpTo.java class I am using...I have hard coded the
username and password as of now. And as I won't be using Swing for
popping the password I have commented some code in the below MyUserInfo
Class.But It's giving me "javax.servlet.ServletException:
sun/security/validator/Validator" exception.
I will appreciate any pointers.
Regards,
Prabhat
package com.cisco.gsbu.CustomerEscalationDb.utils;
import com.jcraft.jsch.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
public class ScpTo{
//public static void main(String[] arg){
// if(arg.length!=2){
// System.err.println("usage: java ScpTo file1
[EMAIL PROTECTED]:file2");
// System.exit(-1);
// }}
public String scpFileTransfer(String lfile,String user,String
host,String rfile,byte[] fileData,long filesize)
{
FileInputStream fis=null;
try{
// String lfile=arg[0];
// String user=arg[1].substring(0, arg[1].indexOf('@'));
// arg[1]=arg[1].substring(arg[1].indexOf('@')+1);
// String host=arg[1].substring(0, arg[1].indexOf(':'));
// String rfile=arg[1].substring(arg[1].indexOf(':')+1);
host = "iceage";
user = "psamadhi";
JSch jsch=new JSch();
System.out.println("Number 1");
Session session=jsch.getSession(user, host, 22);
// username and password will be given via UserInfo interface.
UserInfo ui=new MyUserInfo();
System.out.println("Number 2");
session.setUserInfo(ui);
System.out.println("Number 3");
session.connect();
System.out.println("Number 4");
// exec 'scp -t rfile' remotely
String command="scp -p -t "+rfile;
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
// get I/O streams for remote scp
OutputStream out=channel.getOutputStream();
InputStream in=channel.getInputStream();
channel.connect();
if(checkAck(in)!=0){
System.exit(0);
}
// send "C0644 filesize filename", where filename should not
include '/'
//long filesize=(new File(lfile)).length();
command="C0644 "+filesize+" ";
if(lfile.lastIndexOf('/')>0){
command+=lfile.substring(lfile.lastIndexOf('/')+1);
}
else{
command+=lfile;
}
command+="\n";
out.write(command.getBytes()); out.flush();
if(checkAck(in)!=0){
System.exit(0);
}
// send a content of lfile
fis=new FileInputStream(lfile);
// byte[] buf=new byte[1024];
byte [] buf = fileData; // Prabhat
int len = buf.length;
// while(true){
// int len=fis.read(buf, 0, buf.length);
//if(len<=0) break;
out.write(buf, 0, len); //out.flush();
// }
fis.close();
fis=null;
// send '\0'
buf[0]=0; out.write(buf, 0, 1); out.flush();
if(checkAck(in)!=0){
System.exit(0);
}
out.close();
channel.disconnect();
session.disconnect();
System.exit(0);
}
catch(Exception e){
System.out.println(e);
try{if(fis!=null)fis.close();}catch(Exception ee){}
}
return "true";
}
static int checkAck(InputStream in) throws IOException{
int b=in.read();
// b may be 0 for success,
// 1 for error,
// 2 for fatal error,
// -1
if(b==0) return b;
if(b==-1) return b;
if(b==1 || b==2){
StringBuffer sb=new StringBuffer();
int c;
do {
c=in.read();
sb.append((char)c);
}
while(c!='\n');
if(b==1){ // error
System.out.print(sb.toString());
}
if(b==2){ // fatal error
System.out.print(sb.toString());
}
}
return b;
}
public static class MyUserInfo implements UserInfo,
UIKeyboardInteractive{
public String getPassword(){ System.out.println("Getting
Password:Samy"); 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;
return true;
}
String passwd = "samy" ;
// 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();
//passwd = "samy";
passwd = "samy" ;
//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
}
}
}
}
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
JSch-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jsch-users