服务器:Linux(centos7)
本地:Windows 10
方案一:Use SSH Secure Shell Client
1.下载 SSH/SFTP Secure Shell 3.2.9(https://shareware.unc.edu/pub/win/SSHSecureShellClient-3.2.9.exe)
2.填写端口号和 host ,直接用登陆服务器的账户登录就好。
作者按: 虽然软件看起来不时尚,不过用着舒服、解决问题!
方案二:在服务器搭建 FTP server
方法一:安装 vsftpd
1.安装
yum install vsftpd
2.修改 vsftpd 相关配置
/etc/vsftpd/vsftpd.conf
添加用户
1].修改ftp目录及其父目录权限
2].修改防火墙的接口限制,iptables 或其他
3].修改 SELinux(Security-Enhanced Linux) 安全子系统,禁用之
4].遇到问题
登录失败
修改防火墙端口控制
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
vi /etc/vsftpd.conf
添加 allow_writeable_chroot=YES
500 OOPS: cannot change directory
修改ftp目录及其父目录权限
chmod 755 /root/ftp
无法读取目录
状态: 已登录
状态: 读取目录列表…
状态: 服务器发回了不可路由的地址。被动模式失败。
调查了半天也没解决,在本地虚拟机的 centos 上可以顺利传输。关闭防火墙后问题同样没能解决。
怀疑是阿里云为了安全,对数据传输端口做了限制。
方案二: 用 Python + pyftbdlib 搭建 FTP 服务器
1.安装
pip install pyftpdlib
2.配置服务器,执行程序代码:
# coding:utf-8
#----------------------------
# Author: Kun Liu
# Start date: 2017-03-28
# Latest edit: 2017-03-28
#=============================
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import logging
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
LOG_FILE = 'FTP_LOG.txt'
CONTROAL_PORT = 21
USER_NAME = "test"
PASSWD = "111111"
import os
USER_DIR = os.getcwd()
ANONY_DIR = os.path.join(USER_DIR, 'anonymous')
if not os.path.exists(ANONY_DIR):
os.mkdir(ANONY_DIR)
#新建一个用户组
authorizer = DummyAuthorizer()
#将用户名,密码,指定目录,权限 添加到里面
authorizer.add_user(USER_NAME, PASSWD, USER_DIR, perm="elr")#adfmw
#这个是添加匿名用户,任何人都可以访问,如果去掉的话,需要输入用户名和密码,可以自己尝试
authorizer.add_anonymous(ANONY_DIR)
handler = FTPHandler
handler.authorizer = authorizer
# Define a customized banner (string returned when client connects)
handler.banner = "Wellcome Trenders! It's a FTP server powered by Pyftpdlib."
def main():
# 日志设置
# logging.basicConfig(filename=LOG_FILE, level=logging.INFO)
#开启服务器
server = FTPServer(("0.0.0.0", CONTROAL_PORT), handler)
server.serve_forever()
if __name__ == '__main__':
main()
同样遇到无法读取目录的问题。