精华内容
下载资源
问答
  • linux sftp安装与使用

    万次阅读 2018-08-18 11:28:00
    linux sftp安装与使用(亲测可用) 来源:百度百科、博客 背景:之前安装了pureftp和vsftp,很久没用了,账户登不上,重新安装也不知道什么原因登不上。碰巧在xshell里看到sftp。 操作环境是centos7x64、lnmp1.5...

                                                        linux sftp安装与使用(亲测可用)

    来源:百度百科、博客

    背景:之前安装了pureftp和vsftp,很久没用了,账户登不上,重新安装也不知道什么原因登不上。碰巧在xshell里看到sftp。

    操作环境是centos7x64、lnmp1.5、SElinux未启用、iptables已启用

    (该方法第6步骤,会造成sshd服务无法重启,需进一步完善。删除第二个图片中代码后恢复正常)

    1.添加用户组(如果使用已有www用户,跳过)

    groupadd sftp

    2.添加用户并设置为sftp组(如果使用已有www用户,跳过)

    useradd -g sftp -s /sbin/nologin  -M sftp

       //-g:加入主要组  -s指定用户登入后所使用的shell    -M:不要自动建立用户的登入目录

    3.修改sftp用户的密码,密码为123(如果使用已有www用户,需要设置密码)

    passwd sftp

    4.创建sftp用户的根目录和属主.属组,修改权限(755)(如果使用已有www用户,/home/wwwroot文件夹为root用户,其子目录均为www用户,跳过)

    5.在sftp的目录中创建可写入的目录(如果使用已有www用户,同上,跳过)

    6.修改sshd_config的配置文件

    把原来的sshd_config配置文件里的subsystem行注释掉

    在sshd_config文件最后添加(如果使用已有www用户,将ChrootDirectory 修改为/home/wwwroot)

    配置完成后重启配置

    7.验证一下

    默认端口22    用户:sftp      密码:123(如果使用www用户,密码你知道的!)

     

    展开全文
  • linux sftp客户端安装与使用。 需要下载Openssl源码和Libssh2源码。 交叉编译openssl: 1、 ./config no-asm shared no-async --prefix=/home/crb/ipc_test/prebuild/depend/openssl --cross-compile-prefix=/opt/...

    linux sftp客户端安装与使用。

    需要下载Openssl源码和Libssh2源码。
    下载路径添加链接描述

    交叉编译openssl:
    1、

    ./config no-asm shared no-async --prefix=/home/crb/ipc_test/prebuild/depend/openssl  --cross-compile-prefix=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-
    

    –prefix=/home/crb/ipc_test/prebuild/depend/openssl
    指定要安装的目录,生成的库也是放在这边的。
    –cross-compile-prefix=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-
    指定交叉编译器。

    2、
    修改生成的Makefile
    把Makefile里面的所有“-m64”全部删除。
    3、make;make install

    交叉编译Libssh2:
    1、

    ./configure --prefix=/home/crb/ipc_test/prebuild/tmp/libssh2  --with-libssl-prefix=/home/crb/ipc_test/prebuild/depend/openssl  LDFLAGS=-L/home/crb/ipc_test/prebuild/depend/openssl/lib --with-libgcrypt-prefix=/home/crb/ipc_test/prebuild/depend/openssl  --disable-examples-build --host=arm-linux CC=arm-hisiv300-linux-gcc
    

    (可用./configure --help看下各个参数的作用)
    –prefix=/home/crb/ipc_test/prebuild/tmp/libssh2
    指定要安装的目录,生成的库也是放在这边的。
    -with-libssl-prefix=/home/crb/ipc_test/prebuild/depend/openssl
    指定要依赖的openssl库。
    –with-libgcrypt-prefix=/home/crb/ipc_test/prebuild/depend/openssl
    指定要依赖的gcrypt库。一般这个库也是openssl源码编译生成的。
    –disable-examples-build
    这个要指定,不然会出错。
    2、make;make install

    注意点 :
    不小心把openssl生成的.a放到了运行时会用到的/lib下,导致函数libssh2_session_handshake一直段错误。

    展开全文
  • sftp有两种登录方式,分别是“账号密码验证”和“公钥私钥验证”,这里是账号密码验证的安装与使用。  sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密...

    sftp有两种登录方式,分别是“账号密码验证”和“公钥私钥验证”,这里是账号密码验证的安装与使用。

          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。

    一、Java如何调用

    通过main方法进行测试,建议ip、端口、账号、密码、上传路径配置到数据库或者配置文件中

    package com.haiyisoft.ywsdWeb_Main;
    
    
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.util.Properties;
    import java.util.Vector;
     
    import org.apache.commons.io.IOUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.SftpException;
    /**
     * 
     * @ClassName: SFTPUtil
     * @Description: sftp连接工具类
     * @date 2017年5月22日 下午11:17:21
     * @version 1.0.0
     */
    public class SFTPUtil {
    	private transient Logger log = LoggerFactory.getLogger(this.getClass());
        
        private ChannelSftp sftp;
          
        private Session session;
        /** FTP 登录用户名*/  
        private String username;
        /** FTP 登录密码*/  
        private String password;
        /** 私钥 */  
        private String privateKey;
        /** FTP 服务器地址IP地址*/  
        private String host;
        /** FTP 端口*/
        private int port;
          
      
        /** 
         * 构造基于密码认证的sftp对象 
         * @param userName 
         * @param password 
         * @param host 
         * @param port 
         */  
        public SFTPUtil(String username, String password, String host, int port) {
            this.username = username;
            this.password = password;
            this.host = host;
            this.port = port;
        }
      
        /** 
         * 构造基于秘钥认证的sftp对象
         * @param userName
         * @param host
         * @param port
         * @param privateKey
         */
        public SFTPUtil(String username, String host, int port, String privateKey) {
            this.username = username;
            this.host = host;
            this.port = port;
            this.privateKey = privateKey;
        }
      
        public SFTPUtil(){}
      
        /**
         * 连接sftp服务器
         *
         * @throws Exception 
         */
        public void login(){
            try {
                JSch jsch = new JSch();
                if (privateKey != null) {
                    jsch.addIdentity(privateKey);// 设置私钥
                    log.info("sftp connect,path of private key file:{}" , privateKey);
                }
                log.info("sftp connect by host:{} username:{}",host,username);
      
                session = jsch.getSession(username, host, port);
                log.info("Session is build");
                if (password != null) {
                    session.setPassword(password);  
                }
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
                  
                session.setConfig(config);
                session.connect();
                log.info("Session is connected");
                
                Channel channel = session.openChannel("sftp");
                channel.connect();
                log.info("channel is connected");
      
                sftp = (ChannelSftp) channel;
                log.info(String.format("sftp server host:[%s] port:[%s] is connect successfull", host, port));
            } catch (JSchException e) {
                log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{host, port, e.getMessage()});  
            }
        }  
      
        /**
         * 关闭连接 server 
         */
        public void logout(){
            if (sftp != null) {
                if (sftp.isConnected()) {
                    sftp.disconnect();
                    log.info("sftp is closed already");
                }
            }
            if (session != null) {
                if (session.isConnected()) {
                    session.disconnect();
                    log.info("sshSession is closed already");
                }
            }
        }
      
        /** 
         * 将输入流的数据上传到sftp作为文件 
         *  
         * @param directory 
         *            上传到该目录 
         * @param sftpFileName 
         *            sftp端文件名 
         * @param in 
         *            输入流 
         * @throws SftpException  
         * @throws Exception 
         */  
        public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
            try {  
                sftp.cd(directory);
            } catch (SftpException e) {
                log.warn("directory is not exist");
                sftp.mkdir(directory);
                sftp.cd(directory);
            }
            sftp.put(input, sftpFileName);
            log.info("file:{} is upload successful" , sftpFileName);
        }
      
        /** 
         * 上传单个文件
         *
         * @param directory 
         *            上传到sftp目录 
         * @param uploadFile
         *            要上传的文件,包括路径 
         * @throws FileNotFoundException
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
            File file = new File(uploadFile);
            upload(directory, file.getName(), new FileInputStream(file));
        }
      
        /**
         * 将byte[]上传到sftp,作为文件。注意:从String生成byte[]是,要指定字符集。
         * 
         * @param directory
         *            上传到sftp目录
         * @param sftpFileName
         *            文件在sftp端的命名
         * @param byteArr
         *            要上传的字节数组
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String sftpFileName, byte[] byteArr) throws SftpException{
            upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));
        }
      
        /** 
         * 将字符串按照指定的字符编码上传到sftp
         *  
         * @param directory
         *            上传到sftp目录
         * @param sftpFileName
         *            文件在sftp端的命名
         * @param dataStr
         *            待上传的数据
         * @param charsetName
         *            sftp上的文件,按该字符编码保存
         * @throws UnsupportedEncodingException
         * @throws SftpException
         * @throws Exception
         */
        public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{  
            upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));  
        }
      
        /**
         * 下载文件 
         *
         * @param directory
         *            下载目录 
         * @param downloadFile
         *            下载的文件
         * @param saveFile
         *            存在本地的路径
         * @throws SftpException
         * @throws FileNotFoundException
         * @throws Exception
         */  
        public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
            if (directory != null && !"".equals(directory)) {
                sftp.cd(directory);
            }
            File file = new File(saveFile);
            sftp.get(downloadFile, new FileOutputStream(file));
            log.info("file:{} is download successful" , downloadFile);
        }
        /** 
         * 下载文件
         * @param directory 下载目录
         * @param downloadFile 下载的文件名
         * @return 字节数组
         * @throws SftpException
         * @throws IOException
         * @throws Exception
         */
        public byte[] download(String directory, String downloadFile) throws SftpException, IOException{
            if (directory != null && !"".equals(directory)) {
                sftp.cd(directory);
            }
            InputStream is = sftp.get(downloadFile);
            
            byte[] fileData = IOUtils.toByteArray(is);
            
            log.info("file:{} is download successful" , downloadFile);
            return fileData;
        }
      
        /**
         * 删除文件
         *  
         * @param directory
         *            要删除文件所在目录
         * @param deleteFile
         *            要删除的文件
         * @throws SftpException
         * @throws Exception
         */
        public void delete(String directory, String deleteFile) throws SftpException{
            sftp.cd(directory);
            sftp.rm(deleteFile);
        }
      
        /**
         * 列出目录下的文件
         * 
         * @param directory
         *            要列出的目录
         * @param sftp
         * @return
         * @throws SftpException
         */
        public Vector<?> listFiles(String directory) throws SftpException {
            return sftp.ls(directory);
        }
        
        public static void main(String[] args) throws SftpException, IOException {
        	SFTPUtil sftp = new SFTPUtil(填写账号, 填写密码, 填写IP, 填写端口);
            sftp.login();
            //byte[] buff = sftp.download("/opt", "start.sh");
            //System.out.println(Arrays.toString(buff));
            File file = new File("C:\\Program Files (x86)\\NetSarang\\Xmanager Enterprise 4\\2.txt");
            InputStream is = new FileInputStream(file);
            
            sftp.upload("/usr/ywnysftp/upload/test", "csdn1.png", is);
    //        sftp.upload("/upload", "2.txt", is);
            sftp.logout();
        }
    }
    
    

     

    二、安装SFTP——linux

    1、创建用户

    我们要建立一个专门管理sftp用户的用户组,方便我们管理权限。 
    a、建立一个名为sftp-users的sftp用户组

    [root@localhost ~]# groupadd sftp-users

    b、在该组建立几个需要登录sftp的用户

    新建用户名为ywnysftp的用户:

    [root@localhost ~]# useradd -g sftp-users -m ywnysftp

    修改ywnysftp的密码:

    [root@localhost ~]# passwd ywnysftp

    (密码我设置为ywnysftp)

    然后连续两次输入你要给该用户设置的密码即可。

    c、如果该用户已存在,但是不在sftp-users组中,可以移动用户到改组

    [root@localhost ~]#  usermod -g sftp-users ywnysftp

     

    2、配置ssh和权限

    打开/etc/ssh/sshd_config文件

    [root@localhost ~]# vi /etc/ssh/sshd_config

    a、修改X11Forwarding值为no 

    原来可能是:

    X11Forwarding yes

    现在修改为:

    X11Forwarding no

    如果X11Forwarding不存在,就在文件最后添加上面的代码。

    b、修改Subsystem sftp为internal-sftp

    Subsystem sftp /usr/libexec/openssh/sftp-server

    # 或者

    Subsystem sftp /usr/lib/openssh/sftp-server

    现在修改为:

    Subsystem sftp internal-sftp

    c、在文件末尾增加内容

    Match Group sftp-users
    
        AllowTcpForwarding no
    
        ChrootDirectory %h #设定属于用户组sftp的用户访问的根文件夹 
    
    ForceCommand internal-sftp

      Match Group sftp-users这一行是指定以下的子行配置是匹配sftp-users用户组的。

    ChrootDirectory %h该行指定Match Group行指定的用户组验证后用于chroot环境的路径,也就是默认的用户目录,比如/home/admin。

    ForceCommand internal-sftp该行强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令。

    这里要特别注意,因为ChrootDirectory %h模式,所以我们等下要设置sftp-users中的所有用户的用户目录权限为root拥有,否则sftp-users组中的用户无法用sftp登录。

     

    3、修改sftp-users用户组用户目录权限

    上面说了,因为使用了ChrootDirectory %h,现在来修改权限。

    a、修改权限为root用户拥有

    [root@localhost home]#chown root /home/ywnysftp

    b、修改权限为root可读写执行,其它用户可读

    [root@localhost home]#chmod 755 /home/ywnysftp

    现在就可以使用sftp登录了,但是我们发现,我们不能上传文件,那是因为登录后默认是用户目录,比如/home/ywnysftp,但是该目录是root用户拥有,因此我们还要修改权限。

    c、在用户目录下建立子目录,让sftp-users中的用户可读写文件 

    我们现在在/home/ywnysftp目录下新建一个upload文件夹:

    [root@localhost home]#cd /home/ywnysftp/
    
    [root@localhost home]#mkdir upload

    5、授权upload文件夹读写 
    让子文件夹upload属于ywnysftp

    # chown ywnysftp /home/ywnysftp/upload

    让子文件夹upload被ywnysftp读写

    # chmod 777 /home/ywnysftp/upload

    4、开启、关闭命令

    开启后注意查看防火墙是否开启,开启需要设置端口放行

    /etc/init.d/sshd start 
     /etc/init.d/sshd stop

    5、Permission denied

    报错Permission denied文件夹权限问题,我无法解决,我将ywnysftp设置到了root组,最后的解决方法:

    (这种做法不对,权限太大,有路过的朋友留言下解决方式,感激不尽)

    [root@localhost ywnysftp]# usermod -g  root ywnysftp
    
    [root@localhost ywnysftp]# id ywnysftp
    
    uid=502(ywnysftp) gid=0(root) groups=0(root)

     

    三、安装SFTP——windows

    下载FreeSSHd,下载地址:http://www.freesshd.com/?ctt=download

    安装过程下一步、下一步即可。

    1、修改sftp路径

    2、修改IP地址、端口号

    3、增加用户账号,使用账号密码登录

    启用,账号密码验证方式,设置账号、密码

    4、要求密码登录

    5、开启sftp

    没有开启,点击开启,如果开启了关闭重新开启,如果无法关闭,去任务管理器结束进程

    四、使用客户端访问

    客户端可以使用WinSCP或者Xmanager中的Xshell进行访问

    1、WinSCP:

    2、Xshell:

    展开全文
  • linux lftp与sftp使用

    千次阅读 2019-06-12 16:19:58
    安装lftp: yum -y install lftp lftp简介 lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常想一个...

    安装lftp:

    yum -y install lftp

    lftp简介

    lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常想一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

    1.常见登录到对方服务器方法

    #登录到ftp--法1
    lftp (ftp://)user:password@site:21  #ftp://可以省略,默认21端口可以省略
    #登录到ftp--法2
    lftp (ftp://)user@site:port   #这种方式回车后,系统提示输入密码
    #登录到sftp---法1
    lftp sftp://user:password@site:22  #如果是默认端口22,可以省略,如果不是就必须填写端口号
    #登录到sftp---法2
    lftp sftp://user@password:port

    2.lftp常用option,lftp [OPTS]

    -f #执行文件中的命令后退出
    -c #执行命令后退出
    --help #显示帮助信息后退出
    --version #显示 lftp 版本后退出
    #其他的选项同 'open' 命令
    -e #在选择后执行命令
    -u [,]  #使用指定的用户名/口令进行验证
    -p  #连接指定的端口

    3.登录后常用命令

    cd #切换远端目录, lcd 切换本地目录
    ls  #显示远端文件列表  !ls 显示本地文件列表
    get #下载远端文件  mget 下载远端文件可以用通配符也就是 *,pget 使用多个线程来下载远端文件, 预设为五个。
    mirror  #下载/上传(mirror -R)/同步 整个目录。
    put  #上传文件 ,mput 上传多个文件(支持通配符)
    mv  #移动远端文件(远端文件改名)
    rm  #删除远端文件, mrm 删除多个远端文件(支持通配符)
    mkdir #建立远端目录 ,rmdir删除远端目录
    pwd  #显示目前远端所在目录,lpwd 显示本地目录
    du  #计算远端目录的大小
    !   #执行本地 shell的命令,如!date
    alias  #定义别名
    bookmark  #设定书签
    exit  #退出ftp

    lftp+sftp使用:

    fileName=123.txt
    USER=xxx
    PASSWORD=xxx
    IP=192.168.1.2
    PORT=202
    lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT}<<EOF
    cd ${DESDIR}
    lcd ${SRCDIR}
    get $fileName
    by
    EOF

    参考:linux lftp命令详解

    展开全文
  • 【51CTO.com快译】大多数人需要与Linux/BSD服务器之间传输文件时,青睐FileZilla或WinSCP之类的实用程序。如果OpenSSH守护程序在该计算机上运行,​​可以通过SSH FTP协议(SFTP)连接到它。上述实用程序提供了图形...
  • 原标题:如何使用SFTP与Linux服务器之间传输文件? 【51CTO.com快译】大多数人需要与Linux/BSD服务器之间传输文件时,青睐FileZilla或WinSCP之类的实用程序。如果OpenSSH守护程序在该计算机上运行,??可以通过Secure...
  • 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件 参考文献:http://ice-k.iteye.com/blog/1068275http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888391.html背景: 有一台主机,安装了windows7,在其...
  • 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件 参考文献: http://ice-k.iteye.com/blog/1068275 http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888391.html 背景:  有一台主机,安装了windows7,...
  • 刚才在调试公司的一台刚安装好的LINUX服务器的时候需要上传一些文件到LINUX服务器上去,我一般用的是sftp功能,所以就写下了这个文章供您参考。  很多用户还是经常在WINDOWS下完成日常工作的,但是同时在管理或...
  • vscode 小巧灵活, LaTex结合起来体验不错, 加上git进行版本控制,可以方便的管理版本,这样可以方便多人进行协作,对于批注可以使用latexdiff来进行操作更改后,保存文件,自动在预览图里面显示。如果按照步骤一...
  • 前提: windows 7 /windows8 / windows 10系统已安装FileZilla软件: 我们还有一个Linux系统,系统上安装了ssh服务,并且开放了22端口。...主机(H):使用sftp协议和需要链接的Linux的Ip,例...
  • 背景:  有一台主机,安装了windows7,在其安装了virtualbox,然后安装了ubuntu虚拟机。...但是这样非常麻烦,现在考虑使用sftp协议来直接传输。   方案:  使用SecureCRT软件ssh连接到ubuntu虚

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 205
精华内容 82
关键字:

linuxsftp安装与使用

linux 订阅