public static void tfc(String[] arg){//args==>file1 user@remotehost:file2
if(arg.length!=2){
System.err.println("usage: java ScpTo file1 user@remotehost:file2");
System.exit(-1);
}
FileInputStream fis=null;
try{
String lfile=arg[0];
//System.out.println(lfile);
String user=arg[1].substring(0, arg[1].indexOf('@'));
//System.out.println(user);
arg[1]=arg[1].substring(arg[1].indexOf('@')+1);
String host=arg[1].substring(0, arg[1].indexOf(':'));
// System.out.println(host);
String rfile=arg[1].substring(arg[1].indexOf(':')+1);
// System.out.println(rfile);
JSch jsch1=new JSch();
Session session;
session = jsch1.getSession(user, host, 22);
System.out.println(user+" "+host);
// username and password will be given via UserInfo interface.
UserInfo ui=new KnownHosts.MyUserInfo();
session.setUserInfo(ui);
//set up aes
//session.setConfig("cipher.s2c", "aes128-cbc,3des-cbc,blowfish-cbc");
//session.setConfig("cipher.c2s", "aes128-cbc,3des-cbc,blowfish-cbc");
//session.setConfig("CheckCiphers", "aes128-cbc");
//done setting aes
System.out.println("aaa");
session.connect();//error here
System.out.println("bbb");
boolean ptimestamp = true;
// exec 'scp -t rfile' remotely
String command="scp " + (ptimestamp ? "-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);
}
File _lfile = new File(lfile);
if(ptimestamp){
command="T "+(_lfile.lastModified()/1000)+" 0";
// The access time should be sent here,
// but it is not accessible with JavaAPI ;-<
command+=(" "+(_lfile.lastModified()/1000)+" 0\n");
out.write(command.getBytes()); out.flush();
if(checkAck(in)!=0){
System.exit(0);
}
}
// send "C0644 filesize filename", where filename should not include '/'
long filesize=_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];
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(JSchException ex1){
ex1.printStackTrace();
try{if(fis!=null){
fis.close();
}
}catch(Exception ee){
System.out.println("ft error");
}
} catch (IOException ex) {
java.util.logging.Logger.getLogger(ScpTo.class.getName()).log(Level.SEVERE, null, ex);
try{if(fis!=null){
fis.close();
}
}catch(Exception ee){
System.out.println("ft error");
}
}
}//end main
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());
}
}else if(b==0){
System.out.println("file sent");
}
return b;
}//end checkack
}//end class