1)在文件夹名dirname后加上'/',传输后,目标位置没有新建文件夹dirname,只有dirname文件夹下的各个文件。
如:
sftp>
get
-r
smsrc/
2)在文件夹名dirname后不加'/',传输后,目标位置新建文件夹dirname,所有文件位置新建文件夹dirname下。
如:
sftp>
get
-r
smsrcpackage jsch;
import javaioFile;
import javaioFileInputStream;
import javautilProperties;
import comjcraftjschChannel;
import comjcraftjschChannelSftp;
import comjcraftjschJSch;
import comjcraftjschJSchException;
import comjcraftjschSession;
public class Test {
protected String host;//sftp服务器ip
protected String username;//用户名
protected String password;//密码
protected String privateKey;//密钥文件路径
protected String passphrase;//密钥口令
protected int port = 22;//默认的sftp端口号是22
/
获取连接
@return channel
/
public ChannelSftp connectSFTP() {
JSch jsch = new JSch();
Channel channel = null;
try {
if (privateKey != null && !""equals(privateKey)) {
//使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥
if (passphrase != null && ""equals(passphrase)) {
jschaddIdentity(privateKey, passphrase);
} else {
jschaddIdentity(privateKey);
}
}
Session session = jschgetSession(username, host, port);
if (password != null && !""equals(password)) {
sessionsetPassword(password);
}
Properties sshConfig = new Properties();
sshConfigput("StrictHostKeyChecking", "no");// do not verify host key
sessionsetConfig(sshConfig);
// sessionsetTimeout(timeout);
sessionsetServerAliveInterval(92000);
sessionconnect();
//参数sftp指明要打开的连接是sftp连接
channel = sessionopenChannel("sftp");
channelconnect();
} catch (JSchException e) {
eprintStackTrace();
}
return (ChannelSftp) channel;
}
/
上传文件
@param directory
上传的目录
@param uploadFile
要上传的文件
@param sftp
/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file = new File(uploadFile);
sftpput(new FileInputStream(file), filegetName());
} catch (Exception e) {
eprintStackTrace();
}
}
/
下载文件
@param directory
下载目录
@param downloadFile
下载的文件
@param saveFile
存在本地的路径
@param sftp
/
public void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftpget(downloadFile,saveFile);
} catch (Exception e) {
eprintStackTrace();
}
}
/
删除文件
@param directory
要删除文件所在目录
@param deleteFile
要删除的文件
@param sftp
/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftprm(deleteFile);
} catch (Exception e) {
eprintStackTrace();
}
}
public void disconnected(ChannelSftp sftp){
if (sftp != null) {
try {
sftpgetSession()disconnect();
} catch (JSchException e) {
eprintStackTrace();
}
sftpdisconnect();
}
}
}目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
上面2点一定注意,仔细检查。我就是因为这个问题,导致一直有这个问题。仔细检查配置后,解决问题。服务器上安装vsftpd就是ftp服务,并开启允许root账户
本地使用FlashFXP这样的客户端上传;
服务器上安装vsftpd并开启root账户允许
(非必要不建议开启root账户)
yum -y install vsftpd
sed -i 's/root/#root/' /etc/vsftpd/ftpusers
sed -i 's/root/#root/' /etc/vsftpd/user_list
/etc/initd/vsftpd restart
本地使用flashfxp连接windows中可以使用Core FTP,FileZilla, WinSCP,Xftp来连接SFTP进行上传,下载文件,建立,删除目录等 *** 作。以winscp软件为例:
1、将之前下载的sftp服务端解压缩,然后直接运行主程序。点“NEXT”按钮进行下面的 *** 作。
2、在许可协议窗口处填写“同意”并点“下一步”按钮继续。
3、在接下来的配置窗口中选择要安装的组件,从界面中可以看到包括client(客户端)与server(服务器端),实际上只需要服务器端,而客户端使用之前下载的WinSCP 382即可。选择相应的服务器端组件后点“下一步”完成安装4、 接下来就要启动该服务了,通过“开始->运行->输入CMD后回车”进入到命令提示窗口,然后通过cd命令定位到c:programfilesopensshbin目录。 5、依次执行mkgroup -l >> etcgroup mkpasswd -l >> etcpasswd命令,这样你目前windows本地帐户中的用户就都可以登录该sftp服务器了,自对文件目录的访问权限和NTFS权限一致。此步骤相当于FTP中的建立访问帐号。6、添加完各个访问帐户后就可以使用了。SFTP:sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。你可以试试下面的方法,把sftp内的 *** 作都写到EOF里面
sftp -oPort=$PORT $USERNAME@$IP <<EOF
cd $FTP2DIR
mkdir $DATA_DATE
cd $DATA_DATE
put $EXPORT_LOCAL_DIR/$data_file_name
put $EXPORT_LOCAL_DIR/$verf_file_name
exit
close
bye
EOF
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)