所以我正在编写一个需要通过SFTP连接到远程服务器的小程序,下拉文件,然后处理该文件.我在这里通过一些答案遇到了JSch,它看起来非常适合这项任务.到目前为止,易于使用,我已经让它工作,我想修复一件小事.我正在使用以下代码连接并拉下文件:
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession("username", "127.0.0.1", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("password");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.cd(REMOTE_FTP_DIR);
sftpChannel.lcd(INCOMING_DIR);
sftpChannel.get(TMP_FILE, TMP_FILE);
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
所以这有效,我得到了文件.我在linux服务器上运行此代码,当我运行代码时,JSch会询问我的Kerberos用户名和密码.看起来像:
Kerberos用户名[george]:
george的Kerberos密码:
我只是输入两个问题,然后程序似乎继续没有问题.但是我需要通过cron任务自动执行此代码,所以我宁愿不让它暂停程序来问我这两个问题.有什么我不提供它,所以它不会问这个?我需要做些什么来阻止它问?希望有人有一些想法.谢谢.
我通过sftp(JSCH)连接到FTP服务器.
Evertime我使用端口21连接到FTP服务器,它始终挂在session.connect().
它不会抛出任何异常.但是当我使用其他端口时.它工作,它抛出异常.
有什么方法可以捕捉错误吗?
这是我的代码示例.
public static void main(String[] args) throws SftpException {
JSch jsch = new JSch();
try {
Session session = jsch.getSession("username", "host", 21);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("password");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp channelSftp = (ChannelSftp) channel;
session.disconnect();
channelSftp.disconnect();
} catch (JSchException e) {
log("Cannot make connection to FTP server ");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)