2016-10-20 7 views
0

Я использую библиотеку jcraft для отправки файлов с одного сервера на другой, используя scp. Код, как этотsftp java client продолжает работу sshd на удаленной машине

public class Scp { 
String DestinationHost;//host IP 
String DestinationUserName;//username 
String DestinationPassword;//password 
String DestinationPublicKeyFile;//public key-if any 
String DestinationDirectory;//where to save on remote 
String SourceFile; 
/* 
    setters-getters 
    */ 
public void send() throws SftpException, FileNotFoundException, JSchException{ 
    JSch jsch = new JSch(); 
    Session session = null; 
    session = jsch.getSession(DestinationUserName,DestinationHost,22); 
    jsch.addIdentity(getDestinationPublicKeyFile(),getDestinationPassword()); 

    session.setConfig("StrictHostKeyChecking", "no"); 
    session.connect();  

    ChannelSftp channel = null; 

    //try to connect 
    channel = (ChannelSftp)session.openChannel("sftp"); 
    channel.connect(30000); 
    channel.connect(); 

    File localFile = new File(getSourceFile()); 
    File remoteFile=new File(getDestinationDirectory()); 
    channel.cd(remoteFile.getParent()); 

    channel.put(new FileInputStream(localFile),//the source file 
    remoteFile.getParentFile().getName());//the destination name(not the path) 

    channel.disconnect(); 
    session.disconnect(); 
    } 
} 

Это был вызван из другого класса Java, в несколько раз, каждый из которых создает новый объект, например, так

Scp scp=new Scp(); 

scp.setDestinationHost(CopyDestHost); 
scp.setDestinationPassword(CopyDestPassword); 
scp.setDestinationPublicKeyFile(CopyDestKey); 
scp.setDestinationUserName(CopyDestUser);    
scp.setSourceFile(temp.getAbsolutePath()); 
scp.setDestinationDirectory(filepath); 

stream.flush(); 
stream.close(); 
scp.send(); 

Поскольку я clossing соединения с использованием channel.disconnect(); и session.disconnect(); Почему я вижу огромный список процессов sshd, выполняющихся на удаленной машине после закрытия соединения? например

root  13251 863 0 11:54 ?  00:00:00 sshd: skaros [priv] 
user  13300 13251 0 11:54 ?  00:00:00 sshd: [email protected] 
skaros 13301 13300 0 11:54 ?  00:00:00 /usr/lib/openssh/sftp-server 
root  14885 863 0 10:35 ?  00:00:00 sshd: skaros [priv] 
skaros 14986 14885 0 10:35 ?  00:00:00 sshd: [email protected] 
skaros 14987 14986 0 10:35 ?  00:00:00 /usr/lib/openssh/sftp-server 

Это проблема? я должен их убить вручную? Я просто оставлю их так?

+0

Выполняет ли какой-либо из ваших экземпляров scp когда-либо исключение при копировании файлов? – Kenster

+0

@ Kenster некоторые, изредка. но я не думаю, что они такие, как запущенные процессы, но не могут быть уверены в этом –

+0

1) Удаляются ли удаленные процессы после завершения процесса Java? 2) Пробовали ли вы автономный клиент SFTP? Вы получаете то же поведение или правильно ли удалены процессы? –

ответ

1

Оказалось, что это «ошибка». This post решил это

while (channel.getExitStatus() == -1){ 
     try{Thread.sleep(1000);}catch(Exception e){System.out.println(e);} 
    }