本文目录一览:
ftp远程创建文件夹错误
1、查看ftp服务器是gssftp 还是vssftp 还是serveru
2、确认是否中文问题
3、确认你对文件夹是否有读写权限。
提示Access is denied 明显你对文件夹没有读写权限,如果是linux系统 把文件夹设置读写执行权限即可。
ftp不能新建文件夹
ftp不能新建文件夹是设置错误造成的,解决方法为:
1、打开后,找到左上角的【站点】并用鼠标左键点击。
2、在弹出的菜单中【选择站点管理器】,图中箭头已经指出。
3、点击站点管理器后,选择【新建站点】。
4、创建新站点的时候站点名称可以自拟,我这里以我的网站为名。
5、创建好后,接下来就是比较重要的一部了,我们在箭头所指的方向输入IP地址(包括计算机IP或者英文类的服务器地址或网站地址)、用户名、密码。
6、连接成功后我们就可以看到网站上面的信息,新建文件夹了。
SFTP 怎么往服务器上上传整个文件夹?
使用SecureSRT中的SFTP传递文件夹时,有个小细节值得注意一下:
1)在文件夹名dirname后加上'/',传输后,目标位置没有新建文件夹dirname,只有dirname文件夹下的各个文件。
如:
sftp get -r smsrc/
2)在文件夹名dirname后不加'/',传输后,目标位置新建文件夹dirname,所有文件位置新建文件夹dirname下。
如:
sftp get -r smsrc
sftp创建新账户并指定目录
首先
你的openssh-server版本至少得是4.8p1,因为配置权限需要版本添加的新配置项ChrootDirectory来完成。
如何查看自己服务器上的ssh版本?大家可以尝试以下命令:
# ssh -V
步骤:
1. 我们需要创建一个用户组,专门用于sftp用户
# groupadd sftpusers ps我里的用户组是sftpusers
2. 我们创建一个用户user
# useradd -s /bin/false -G sftpusers user ps注意这里我们将user用户的shell设置为/bin/false使他没有登陆shell的权限
# passwd user ps设置user用户密码
3. 编辑/etc/ssh/sshd_config
找到Subsystem这个配置项,将其修改为
Subsystem sftp internal-sftp
然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问自己的文件夹
Match Group sftpusers
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /data/sftp/%u #需在 /data/sftp/ 创建user文件夹,该文件夹就是登录的sftp用户目录
保存并关闭
4. 修改user用户所在文件夹的权限,让其属于root用户
# chown root /data/sftp/user
5. 重启sshd服务
# service sshd restart
6. 测试用户账号
# ssh user@localhost
ps连接会被拒绝,证明该用户没有ssh shell登录的权限
# sftp user@localhost
登陆后你会发现你的账号无法切换到除自己本身目录之外的地方;ps或者登录失败,看下面可能出现的问题;
问题:
1,如果在链接服务器的时候出现下面的提示:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root,权限是750 或者755。
解决:设置user目录为root权限,# chown root:user /data/sftp/user #chmod 750 /data/sftp/user
2,Sftp用户登录后不能在本目录操作:
是因为登录后的目录是root权限,需将sftp账号赋予root权限,操作方法将 /etc/passwd 文件中对应的sftp的用户ID修改为0,这样就可以有权限操作登录后的目录了(还有其他赋予权限方法,ps另行查找)。Eg:user:x:503:505::/home/darops:/bin/false 将503改为0-channelsftp创建文件夹
sftp免密用java怎么调用
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import org.apache.commons.lang.ArrayUtils;
import com.huawei.bme.commons.om.log.DebugLog;
import com.huawei.bme.commons.om.log.LogFactory;
import com.huawei.icity.commons.constants.KeyConstant;
import com.huawei.icity.commons.constants.NumberConstant;
import com.huawei.icity.commons.exception.SPMException;
import com.huawei.icity.commons.log.IcityLogFactory;
import com.huawei.icity.commons.log.IcityRuntimeLog;
import com.huawei.icity.commons.sysconfig.StaticInitData;
import com.huawei.icity.commons.utils.StringTools;
import com.huawei.icity.omp.common.util.CommonTools;
import com.huawei.icity.omp.interfaces.hint.constant.TimetaskConstants;
import com.huawei.mdmc.bfm.cms.assist.common.domain.SingleTableModel;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelS;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
* SFTP公共处理类 〈提供SFTP文件上传,下载,获取指定目录 下文件名集合, 获取指定目录 下文件集合等方法
*
* @author mKF75022
* @version iCity Manager V100R002 2012-7-3
* @since iCity Manager V100R002C01
*/
public class SFTPTool
{
/**
* 调测日志记录器。
*/
private static final DebugLog DEBUGGER = LogFactory.getDebugLog(SFTPTool.class);
/**
* 运行日志记录器。
*/
private static final IcityRuntimeLog RUNTIMELOGGER = IcityLogFactory
.getRuntimeLog(SFTPTool.class);
/**
* Sftp客户端对象
*/
private ChannelSftp sftp = null;
/**
* SFTP IP地址
*/
private String ip;
/**
* SFTP 端口
*/
private String port;
/**
* SFTP 用户名
*/
private String userName;
/**
* SFTP 密码
*/
private String password;
/**
* SFTP上传模式:BINARY
*/
// private static final int BINARY_FILE_TYPE = 2;
/**
*
* 获取实例
*
* @return SFTPTool newinstance实例
*
*/
public static SFTPTool getNewInstance()
{
return new SFTPTool();
}
/**
* 初始化连接参数
*
* @param sftpIP
* IP
* @param sftpPort
* 端口
* @param sftpUsername
* 用户名
* @param sftpPassword
* 密码
*/
public void init(String sftpIP, String sftpPort, String sftpUsername, String sftpPassword)
{
// 获取SFTP连接信息
this.ip = sftpIP;
this.port = sftpPort;
this.userName = sftpUsername;
this.password = sftpPassword;
}
/**
* 从SFTP将符合约定命名的文件都下载到本地 .
*
* @param sftpDir
* SFTP服务器文件存放路径
* @param locDir
* 本地文件存放路径
* @param regex
* 指定文件名的格式
* @param needBackup
* 是否需要文件备份(true:是;false:否)
* @param needFullMatch
* 是否要求全局匹配(true:是;false:否)
* @param deleteFtpFile
* the delete ftp file
* @return 下载到本地的文件列表
*/
public ListFile synSFTPFileToLocal(String sftpDir, String locDir, String regex,
boolean needBackup, boolean needFullMatch, boolean deleteFtpFile)
{
ListFile files = new ArrayListFile(KeyConstant.INITIAL_NUMBER);
try
{
this.connect(ip, Integer.parseInt(this.port), userName, password);
// 获得FTP上文件名称列表
ListString ftpFileNameList = this.listFiles(sftpDir, regex, needFullMatch);
File localFile = null;
int size = ftpFileNameList.size();
// 根据每个FTP文件名称创建本地文件。
for (int i = 0; i size; i++)
{
// 下载源文件
localFile = this.download(sftpDir, locDir, ftpFileNameList.get(i), deleteFtpFile);
if (localFile.exists())
{
files.add(localFile);
}
if (needBackup)
{
// 备份源文件生成默认备份文件路径(据请求文件路径,生成同级目录的备份文件夹绝对路径)
String parentDir = sftpDir.substring(NumberConstant.INT_0,
sftpDir.lastIndexOf("/") + 1);
String backupDir = parentDir + TimetaskConstants.DEFAULT_BACKUP_DIRNAME;
boolean bakExists = openDir(backupDir);
if (bakExists)
{
this.uploadFile(backupDir, localFile);
}
else
{
boolean parentExists = openDir(parentDir);
if (parentExists)
{
s;
this.uploadFile(backupDir, localFile);
}
else
{
DEBUGGER.error("sftp parentDir no exisits ");
}
}
}
}
}
catch (Exception e)
{
DEBUGGER.error("synSFTPFileToLocal Exception", e);
}
finally
{
this.disconnect();
}
return files;
}
/**
* 连接sftp服务器
*
* @param sftpip
* ip地址
* @param sftpport
* 端口
* @param sftpusername
* 用户名
* @param sftppassword
* 密码
* @return channelSftp
* @throws SPMException
*/
public ChannelSftp connect(String sftpip, int sftpport, String sftpusername, String sftppassword) -channelsftp创建文件夹
{
sftp = new ChannelSftp();
try
{
JSch jsch = new JSch();
jsch.getSession(sftpusername, sftpip, sftpport);
Session sshSession = jsch.getSession(sftpusername, sftpip, sftpport);
RUNTIMELOGGER.info("Session created");
sshSession.setPassword(sftppassword);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
// 设置超时时间为
sshSession.setTimeout(Integer.parseInt(StaticInitData.getFtpConnectTimeOut())
* NumberConstant.INT_1000);
sshSession.connect();
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
// 设置文件类型
// ftpClient.setFileType(BINARY_FILE_TYPE);
// 与防火墙相关
// ftpClient.enterLocalPassiveMode();
}
catch (JSchException e)
{
DEBUGGER.error("JSchException : {}", e);
}
return sftp;
}
// /**
// * 创建指定文件夹
// *
// * @param dirName
// * dirName
// */
// public void mkDir(String dirName)
// {
// try
// {
// s;
// }
// catch (SftpException e)
// {
// DEBUGGER.error("mkDir Exception : " + e);
// }
// }
/**
* 创建指定文件夹
*
* @param dirName
* dirName
*/
public void mkDir(String dirName)
{
String[] dirs = dirName.split("/");
try
{
String now = s;
for (int i = 0; i dirs.length; i++)
{
boolean dirExists = openDir(dirs[i]);
if (!dirExists)
{
s(dirs[i]);
s(dirs[i]);
}
}
s;
}
catch (SftpException e)
{
DEBUGGER.error("mkDir Exception : " + e);
}
}
/**
* 打开指定目录
*
* @param directory
* directory
* @return 是否打开目录
*/
public boolean openDir(String directory)
{
try
{
s;
return true;
}
catch (SftpException e)
{
DEBUGGER.error("openDir Exception : " + e);
return false;
}
}