0
我正在使用jcraft庫爲了使用scp將文件從一臺服務器發送到另一臺服務器。該代碼是這樣sftp java客戶端保持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
這是一個問題嗎?我應該手動殺死他們嗎?我只是像這樣離開他們嗎?
是否有任何scp實例在複製文件時拋出異常? – Kenster
@Kenster一些,偶爾。但是我不認爲它們與正在運行的進程一樣多,但不能確定這一點 –
1)在結束Java進程後,遠程進程是否消失? 2)你嘗試了獨立的SFTP客戶端嗎?你是否得到相同的行爲或者遠程進程是否正確關閉? –