返回顶部
首页 > 资讯 > 服务器 >sftp使用方法
  • 886
分享到

sftp使用方法

网络linux服务器 2023-09-02 11:09:40 886人浏览 薄情痞子
摘要

要谈 sftp( ssh File Transfer Protocol),首先要谈 ftp( File Transfer Protocol),大家都知道ftp是文件传输协议,它基于 tcp协议,可以用来发送文件。刚开始学web开发的时候,接

要谈 sftpssh File Transfer Protocol),首先要谈 ftpFile Transfer Protocol),大家都知道ftp是文件传输协议,它基于 tcp协议,可以用来发送文件。刚开始学web开发的时候,接触到一些免费的云空间,当时就是用的一个 ftp工具项目传上去的。

定义:

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

连接方法

windows中可以使用Core FTP,FileZilla, WinSCP, Xftp来连接SFTP进行上传,下载文件,建立,删除目录等操作。

linux下直接在终端中输入:sftp username@remote ip(or remote host name)。出现验证时,只需填入正确的密码即可实现远程链接。登入成功后终端呈现出:sftp>….

在sftp的环境下的操作就和一般ftp的操作类似了,ls,rm,mkdir,dir,pwd,等指令都是对远端进行操作,如果要对本地操作,只需在上述的指令上加‘l’变为:lls,lcd, lpwd等。当然既然是ftp,当然得说它的上传和下载咯!

上传:put /path/filename(本地主机) /path/filename(远端主机);

下载:get /path/filename(远端主机) /path/filename( 本地主机)。

另外提一下sftp在非正规端口(正规的是22号端口)登录:sftp -o port=1000 username@remote ip.

需要注意的是,用那个用户登陆就会登陆到那个用户的目录下,如用root登陆就是在/root 下,需要到哪个目录切换目录即可。比如要切换到 /home/wwwroot/lnmp.org 的网站目录下,直接在远程那边输入/home/wwwroot/lnmp.org 回车就切换过去了。

注意上传的文件的属主会设置为sftp登陆用户,如果要更改为www用户的话,需要在ssh里执行:chown www:www -R 网站目录 来更改属主和属组。

jsch简介

jsch是ssh的纯java实现。这么讲有点抽象,通俗说,你在官网上down下来就是一个jar包,引入你的项目,就可以用来给一个同样开启了ssh服务的服务器安全的传文件了(当然,你需要那台目标服务器的一些用户名和密码信息,不然就gg了)。

开始使用

  • 第一步:首先在Maven中央仓库中查一下怎么在pom中依赖,可以点这里

tip: 如果你用的是Gradle等其它构建工具,就用其他方式依赖进项目。如果没用构件工具,直接把jar包添加到项目里吧。

maven的是这个(我用的是当前最新版本0.1.54):

     com.jcraft    jsch    0.1.54

复制

加到pom文件中就可以进行下一步了。

  • 第二步:创建一个工具类:SFTPUtils.java, 内容如下
  • import com.jcraft.jsch.*;
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.Properties;public class SFTPUtils {  static private final Logger log = LoggerFactory.getLogger(SFTPUtils.class);  static private Session session = null;  static private Channel channel = null;  static private int timeout = 60000; //超时数,一分钟    public static ChannelSftp getChannel(String username, String passWord, String ip, String port) throws JSchException {    JSch jsch = new JSch(); // 创建JSch对象    // 根据用户名,主机ip,端口获取一个Session对象    session = jsch.getSession(username, ip, Integer.valueOf(aisle.getServerPort()));    log.info("Session created...");    if (password != null) {      session.setPassword(password); // 设置密码    }    Properties config = new Properties();    config.put("StrictHosTKEyChecking", "no");    session.setConfig(config); // 为Session对象设置properties    session.setTimeout(timeout); // 设置timeout时间    session.connect(); // 通过Session建立链接    log.info("Session connected, Opening Channel...");    channel = session.openChannel("sftp"); // 打开SFTP通道    channel.connect(); // 建立SFTP通道的连接    log.info("Connected successfully to ip :{}, ftpUsername is :{}, return :{}",        ip,username, channel);    return (ChannelSftp) channel;  }    public static void closeChannel() throws Exception {    if (channel != null) {      channel.disconnect();    }    if (session != null) {      session.disconnect();    }  }}

复制

  • 第三步:工具类都建好了,就直接用吧——创建测试类。
import com.gildata.gup.util.SFTPUtils;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.SftpException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.io.File;import java.io.FileInputStream;import java.util.Vector;@Servicepublic class SftpTest {private final Logger log = LoggerFactory.getLogger(SftpPushTest.class);public void testSftp() throws SftpException {// 假设参数值String dstDirPath = "E:\\target";String username = "admin";String password = "admin";String ip = "127.0.0.1"; String port = 21; ChannelSftp channelSftp = null;String dstFilePath; // 目标文件名(带路径),如: D:\\file\\file.doc,这个路径应该是远程目标服务器下要保存的路径try {// 一、 获取channelSftp对象channelSftp = SFTPUtils.getChannel(username, password, ip, port);// 二、 判断远程路径dstDirPath是否存在(通道配置的路径)try {Vector dir = channelSftp.ls(dstDirPath);if (dir == null) { // 如果路径不存在,则创建channelSftp.mkdir(dstDirPath);}} catch (SftpException e) { // 如果dstDirPath不存在,则会报错,此时捕获异常并创建dstDirPath路径channelSftp.mkdir(dstDirPath); // 此时创建路o如果再报错,即创建失败,则抛出异常e.printStackTrace();}// 三、 推送文件try {log.info("send the file : {}", file.getName());dstFilePath = dstDirPath + "\\" + file.getName();log.info("the file all path is :{}", dstFilePath);// 推送: dstFilePath——传送过去的文件路径(全路径),采用默认的覆盖式推送channelSftp.put(new FileInputStream(file), dstFilePath); // jsch触发推送操作的方法}  catch (SftpException e) {log.debug("An error occurred during sftp push, send data fail, the target path is :{}", dstDirPath);if (log.isDebugEnabled()) {e.printStackTrace();}}}  finally {// 处理后事if (channelSftp != null)channelSftp.quit();try {SFTPUtils.closeChannel();} catch (Exception e) {if (log.isDebugEnabled())e.printStackTrace();}}}}

复制

执行testSftp方法,就可以把file文件传到目标服务器的dstDirPath目录下了。

假设file文件在本地的路径为: D:\\source\\sftp_learning.ppt。而目标路径dstDirPath为: E:\\target,那么执行推送后,将会在ip为ip的远程设备下的E:\\target目录下找到sftp_learning.ppt文件。

问题?!

不过遗憾的是,window并不像linux一样自带了ssh服务。像上面的E:\\target这样的目录显然表明了这个远程设备是window系统。正常开发中,即使你的用户名、 密码、 端口都没有输错,程序也将会抛SftpException异常,那是因为你得目标服务器没有启用ssh服务。

怎么解决呢?

既然目标服务器是没有自带ssh服务的window,那就想办法在window下配置ssh服务咯。

一般而言,服务器通常跑在linux下,所以不用担心这个问题。笔者这次也是因为想在自己的window下本地测试一下,所以遇到了这个问题。如何在window下配置ssh服务,这又是另一个话题了。这次测试中,我用的是Cygwin工具。具体怎么使用,网上一搜一大把。如果读着支持笔者,就请关注我吧,我会尽快把Cygwin的使用心得分享给大家的!

来源地址:https://blog.csdn.net/2301_78008478/article/details/130605951

--结束END--

本文标题: sftp使用方法

本文链接: https://lsjlt.com/news/390720.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • sftp使用方法
    要谈 sftp( SSH File Transfer Protocol),首先要谈 ftp( File Transfer Protocol),大家都知道ftp是文件传输协议,它基于 tcp协议,可以用来发送文件。刚开始学web开发的时候,接...
    99+
    2023-09-02
    网络 linux 服务器
  • 使用sftp命令上传文件夹方法
    # 前言sftp上传单个文件使用put,多个文件可使用mput,但是要上传整个文件夹,则比较复杂,需要使用多个命令组合,包括find、awk等。# sftp上传文件夹```#!/bin/bash sss=`find /ngs/ec...
    99+
    2023-06-06
  • Linux sftp命令用法
    SFTP的概念 sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SS...
    99+
    2022-06-04
    Linuxsftp命令用法 Linuxsftp命令
  • sftp命令的用法
    记录一下 sftp 命令的简单常用方法。 使用 sftp 连接服务器。 语法:sftp -P 端口号 用户名@IP地址 例子:sftp -P 123 root@127.0.0.1 注意:指定端口时 -P 是要大写,没有指定端口则默认为 2...
    99+
    2023-08-18
    服务器 linux 网络
  • Linux sftp命令用法总结
    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,...
    99+
    2022-06-04
    Linux sftp命令
  • Linux中如何使用sftp命令
    小编给大家分享一下Linux中如何使用sftp命令,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Linux常用命令sftp命令全称是Secure File Transfer Protocol。是一款交互式的文件传输程序,s...
    99+
    2023-06-28
  • 如何使用SSH和SFTP协议
    这篇文章主要讲解了“如何使用SSH和SFTP协议”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用SSH和SFTP协议”吧!有一个不必要但很重要的步骤,就是保证你的这个可以访问的系统是安...
    99+
    2023-06-03
  • Linux中如何使用sftp-server命令
    小编给大家分享一下Linux中如何使用sftp-server命令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linux常用命令sftp-server命令是一个“...
    99+
    2023-06-28
  • 在Java中使用SFTP传输文件
    1. 概述 在本教程中,我们将讨论如何在Java中使用SFTP从远程服务器上传和下载文件。 我们将使用三个不同的库:JSch、SSHJ 和 Apache Commons VFS来实现。 2. 使用 JSch 首先,让我们看看如何使用JSch...
    99+
    2023-08-25
    java 服务器 apache
  • 怎么在Linux系统中使用SFTP方式传输文件
    本篇文章给大家分享的是有关怎么在Linux系统中使用SFTP方式传输文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 在xftp里新建一个连接,注意协议需要选择SFTP,然后...
    99+
    2023-06-13
  • linux下scp和sftp命令使用详解
    目录前言1. scp 使用2. sftp 使用3. scp 和 sftp 有啥区别?用哪个好?总结前言 scp 和 sftp 是一种远程文件加密传输协议,讲通俗点就是用来操控本地/远程文件,不知道你注意到了没有,它们开头...
    99+
    2022-06-04
    linux中scp命令 linux中sftp命令
  • Linux sftp命令的用法是怎样的
    Linux sftp命令的用法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SFTP的概念sftp是Secure File Transfer ...
    99+
    2023-06-22
  • Linux下SFTP怎么用
    这篇文章将为大家详细讲解有关Linux下SFTP怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP...
    99+
    2023-06-28
  • pycharm使用sftp同步服务器的步骤
    目录目的步骤1、打开同步设置2、配置ssh连接3、建立目录映射4、其他设置5、使用服务器环境目的 为了电脑能够使用实验室服务器的资源,且可以通过sftp进行同步,随时同步项目代码。 ...
    99+
    2024-04-02
  • Python使用sftp实现上传和下载功能
    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能。 1.功能实现 1、根据输入参数判断是文件还是目录,进行上传和下载 2、本地参数local需...
    99+
    2024-04-02
  • Python使用sftp实现传文件夹和文件
    利用python的sftp实现文件上传,可以是文件,也可以是文件夹。 版本Python2.7.13 应该不用pip安装更多的插件,都是自带的 不多说 上代码 # -*- codi...
    99+
    2024-04-02
  • linux如何在家中使用SSH和SFTP协议
    这篇文章给大家分享的是有关linux如何在家中使用SSH和SFTP协议的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过 SSH 和 SFTP 协议,我们能够访问其他设备,有效而且安全的传输文件等等。几年前,我决...
    99+
    2023-06-16
  • 使用golang上传文件到SFTP主机失败
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《使用golang上传文件到SFTP主机失败》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以...
    99+
    2024-04-04
  • sftp常用命令介绍
    sftp常用命令: 1. sftp 登录sftp服务器 sftp user@ip ​​​​​​ 如需要看全部命令:则使用help即可 2. pwd和lpwd 、 ls和lls 、cd和lcd 等 sftp登录之后默认操作是远程服务器,当需...
    99+
    2023-08-18
    服务器 linux 运维
  • 如何在 Linux 服务器上安装和使用 SFTP?
    SFTP 或 SSH 文件传输协议是一种在两台计算机之间安全传输数据的方法。它是运行在 SSH 协议之上并利用其安全性并完全支持其身份验证的 FTP。 现在,建议使用 SFTP 而不是旧的旧 FTP 或 FTP/S 协议。SFTP 默认...
    99+
    2023-10-02
    ssh 服务器 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作