sftp免密登录

public class LogInSftpByPubKey {

private static final Logger logger=LoggerFactory.getLogger(AuthSftpByPubKey.class);

/**session 超时时间 1分钟**/

private static final int SESSION_TIME_OUT=60000;//60s

/**

*

* 方法说明:上传本地文件至SFTP服务器指定目录<br>

*

* @param privKeyPath 本地私钥文件绝对路径 eg:../../id_rsa

* @param remoteUser 目标SFTP服务器用户

* @param port 目标主机地址

* @param host 目标端口

* @return ChannelSftp

* @throws Exception Exception

*/

public static ChannelSftp getChannel(String privKeyPath,String remoteUser,int port,String host) throws ServiceException{

JSch jsch = new JSch();

//密钥文件绝对路径

Channel channel=null;

try {

jsch.addIdentity(privKeyPath);

//用户名

Session session = jsch.getSession(remoteUser, host, port);

Properties config = new Properties();

config.put("StrictHostKeyChecking", "no");

session.setConfig(config);

session.setTimeout(SESSION_TIME_OUT);

session.connect();

channel = session.openChannel("sftp");

channel.connect();

} catch (JSchException e) {

throw new ServiceException(ExceptionCode.OTHER_EXCEPTION,String.format("获取sftp连接异常:%s", e.toString()));

}

return (ChannelSftp)channel;

}

/**

*

* 方法说明:上传文件到远程SFTP服务器上<br>

*

* @param sftp sftp

* @param remoteUploadDir 远程上传目录  eg: ~/upload/

* @param fileAbsPath 要上传的文件本地绝对路径 eg: /weblogic/test.txt

* @throws ServiceException ServiceException

*/

public static void upload(ChannelSftp sftp,String remoteUploadDir,String fileAbsPath) throws ServiceException{

//check param

if(StringUtils.isEmpty(fileAbsPath)||StringUtils.isEmpty(remoteUploadDir)){

throw new ServiceException(ExceptionCode.ILLEGAL_ARGUMENT, "上传文件绝对路径或远程目录不能为空");

}

File uploadFile=new File(fileAbsPath);

if(!uploadFile.isFile()){

throw new ServiceException(ExceptionCode.OTHER_EXCEPTION, String.format("文件路径:[%s]不是一个文件", fileAbsPath));

}

//upload

try {

sftp.cd(remoteUploadDir);

sftp.put(new FileInputStream(uploadFile), uploadFile.getName());

} catch (Exception e) {

throw new ServiceException(ExceptionCode.OTHER_EXCEPTION, String.format("上传文件至SFTP服务器异常:%s",e.toString()));

}

}

/**

*

* 方法说明:从SFTP服务器上指定目录下载指定文件到本地目录<br>

*

* @param sftp sftp

* @param localPath 本地路径 eg:/weblogic/test/

* @param remoteAbsPath 远程要下载的文件绝对路径 eg:.../.../test.txt

* @param localFileName 本地文件名

* @throws ServiceException ServiceException

*/

public static void download(ChannelSftp sftp,String localPath,String remoteAbsPath,String localFileName) throws ServiceException{

//check param

if (StringUtils.isEmpty(localPath)

|| StringUtils.isEmpty(remoteAbsPath)

|| StringUtils.isEmpty(localFileName)) {

throw new ServiceException(ExceptionCode.ILLEGAL_ARGUMENT, "必须参数不能为空");

}

File localDir=new File(localPath);

if(!localDir.isDirectory()){

throw new ServiceException(ExceptionCode.OTHER_EXCEPTION,String.format("路径:[%s]不是一个目录", localPath));

}

try {

@SuppressWarnings("unchecked")

Vector<LsEntry> vector=(Vector<LsEntry>)sftp.ls(remoteAbsPath);

if(vector==null||vector.size()!=1){

//target file not exist!

throw new ServiceException(ExceptionCode.OTHER_EXCEPTION,String.format("要下载的文件:[%s]不存在SFTP服务器上", localFileName));

}

//删除本地重名文件

String fullFilePath=localPath.endsWith(File.separator)?localPath:(localPath+File.separator)+localFileName;

File oldFile=new File(fullFilePath);

if(oldFile.exists()){

oldFile.delete();

}

sftp.get(remoteAbsPath, fullFilePath);

} catch (SftpException e) {

throw new ServiceException(ExceptionCode.OTHER_EXCEPTION, String.format("从SFTP服务器上下载文件异常:%s", e.toString()));

}

}

public static void closeSession(ChannelSftp sftp){

if(sftp!=null){

try {

sftp.getSession().disconnect();

} catch (JSchException e) {

logger.error("关闭SFTP session 异常",e);

}

}

}

时间: 2024-10-14 20:46:10

sftp免密登录的相关文章

中小企业openstack私有云布署实践【11.3 计算nova - compute节点-nova用户免密登录(用于云主机冷迁移+扩展云主机大小)】

云主机迁移+扩展云主机大小 ,官方说它依赖nova用户之间的免密登录.确保每个resion区域的compute节点服务器他们可以相互SSH免密 compute1-7     他们相互SSH免密 kxcompute1-9  他们相互SSH免密 1.注意!是每台机器上的nova用户向另一台机器的nova用户的免密登录 每台compute节点修改ssh配置,目的是为了不让其提示输入yes保存密钥 vi /etc/ssh/ssh_config 尾部添加 StrictHostKeyChecking no

ubuntu16.04服务器配置ssh免密登录

原版资料英文,链接在此  https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2 在客户端操作 ssh-keygen -t rsa 文件位置写/home/try/.ssh/server_rsa,不使用默认值,我命名为server_rsa担心影响到git的key(因为我的git使用的是默认值) ssh-copy-id   [email protected](你的服务器ip), 或这使用 cat ~/.ss

基于vagrant工具在win7下免密登录linux

一.SSH加密方式 SSH采用的是"非对称密钥系统",即耳熟能详的公钥私钥加密系统,其安全验证又分为两种级别. 1. 基于口令的安全验证 这种方式使用用户名密码进行联机登录,一般情况下我们使用的都是这种方式.整个过程大致如下: (1)客户端发起连接请求. (2)远程主机收到用户的登录请求,把自己的公钥发给客户端. (3)客户端接收远程主机的公钥,然后使用远程主机的公钥加密登录密码,紧接着将加密后的登录密码连同自己的公钥一并发送给远程主机. (4)远程主机接收客户端的公钥及加密后的登录密

SSH免密登录机制

 SSH免密登录机制:(见下图) 1.A先使用ssh-keygen生成一对公钥和私钥:ssh-keygen 2.将A的公钥复制给B一份,并且将其追加到B的授权文件中:ssh-copy-id B 3.接下来ssh B,就能免密登录. 为什么将A的公钥拷给B中的授权文件中就能免密登录了呢? 因为在执行ssh B命令时,B中会用A的公钥随机加密一段密文返回给A,A在接收到密文以后,就会用自己的私钥对密文进行解密, 如果能被解密,就允许免密登录,如果不能被解密,就无法登录.由公钥加密的内容,只能由私钥解

linux 免密登录常见问题

1,免密场景 很多用户和场景是需要实现机器之间 用户免密登录的.例如hadoop 集群,oracle rac等等. 2,常规免密操作 ----- 这种方式最简单直接,但是是2点之间的 机器A: 192.168.1.1 机器B:  192.168.1.2 需求:要求在机器A 上可以使用root用户免密登录到机器B(注意,这里登录B 也是使用的root用户) 步骤: (1),机器A上创建自己的ssh 秘钥 ssh-keygen -t rsa -P ''  一路回车就好 (2),将自己的公钥给到目标机

SSH免密登录(并且免yes交互)

问题描述:主机A使用ssh协议远程主机B,默认会开启口令认证,即输入主机B对应用户的登录密码,并且第一次登录时,主机A需验证是否接受来自主机B的公钥,输入"yes/no"完成交互.实现ssh免密登录和免yes交互可提高服务器管理效率. 实现思路:1. 主机A创建密钥对id_rsa,id_rsa.pub,并将公钥id_rsa.pub上传至主机B,保存为/root/.ssh/authorized_keys文件: 2. 修改主机B的sshd服务配置文件/etc/ssh/sshd_config

【Linux】ssh免密登录

一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想A通过ssh免密码登录到B. 1.在A机下生成公钥/私钥对. [[email protected] ~]$ ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.它在/home/chenlb

linux(十)配置ssh免密登录实现

知道ssh的朋友应该知道它是用来干什么的,如果你不知道什么是ssh远程登录的话,可以去看一下我的上一篇博客,关于linux的网络基础的知识.备注:ssh是用于远端登入.执行ssh指令开启终端机阶段作业,并登入远端主机. 一.ssh远程登录 今天要和大家说的是,当我们一台客户机要远程登录到服务器的时候,输入密码才能登录成功. 过程流程图: 所以我们在想能不能我们不需要输入密码,直接使用ssh 用户名@服务器ip就可以登录呢? 二.ssh免密登录原理 看到这个图可能大家有一点蒙逼.我给大家解释一下.

免密登录,密钥登录,远程登录

远程登录 我们启动linux系统之后,打开Xshell链接两个虚拟机,像我们这样的小白我是使用两个虚拟机(自己配置一个可以克隆一个,改变一下静态IP就可以),练习的时候在Xshell里链接两个虚拟机. 在其中一个虚拟机中敲入命令:ssh-keygen -t  rsa   其中 rsa是密钥对的格式,回车之后会出来交互语句: 第一句话的意思是将生成的密钥对放在哪个文件夹, 第二句话的意思是给密钥对设置密码(我选择空=直接回车) 第三句话的意思是确认一遍密码(继续回车) 进入当前用户的家目录中,查看