java代码sftp免密登录_详解Java使用Jsch与sftp服务器实现ssh免密登录
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");