1. 准备工作
-
生成SSH密钥对:在客户端机器上生成一对SSH密钥,包括一个私钥和一个公钥。可以使用ssh-keygen -t rsa命令在终端中生成。
-
上传公钥到SFTP服务器:将生成的公钥(如id_rsa.pub)添加到SFTP服务器上对应用户的~/.ssh/authorized_keys文件中。
-
设置文件权限:确保服务器上的~/.ssh目录权限为700,authorized_keys文件权限为600。
-
引入JSch依赖:在Java项目中引入JSch库的依赖,以便使用其提供的SSH和SFTP功能。
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.util.Properties;public class SftpUtil {
private static final String SFTP_HOST = "your_sftp_host"; // SFTP服务器地址
private static final int SFTP_PORT = 22; // SFTP服务器端口号,默认为22
private static final String SFTP_USER = "your_sftp_user"; // SFTP用户名
private static final String SFTP_PRIVATE_KEY_PATH = "path_to_your_private_key"; // 私钥文件路径public static void main(String[] args) {
JSch jsch = new JSch(); // 创建JSch对象
Session session = null;
ChannelSftp channelSftp = null;try {
// 添加私钥,用于免密登录
jsch.addIdentity(SFTP_PRIVATE_KEY_PATH);// 创建会话
session = jsch.getSession(SFTP_USER, SFTP_HOST, SFTP_PORT);
// 设置会话配置,关闭严格主机密钥检查 session.setConfig(config);\\
// 连接服务器
session.connect();// 打开SFTP通道
channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();// 进行SFTP操作,例如上传文件、下载文件等
// 这里可以添加你的具体业务逻辑System.out.println("SFTP免密登录成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭通道和会话
if (channelSftp != null && channelSftp.isConnected()) {
channelSftp.disconnect();
}
if (session != null && session.isConnected()) {
session.disconnect();
}
}
}
}Properties config = new Properties();
config.put("StrictHostKeyChecking", "no"); config.put("PreferredAuthentications", "publickey,keyboard-interactive,password"); config.put("PreferredAuthentications", "publickey,keyboard-interactive,password");
评论前必须登录!
注册