sftp与ftp的区别与联系
分类: LINUXsftp 是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作。举例,如远程主机的 IP 是 192.168.10.163或者是域名www.server.cn,用户名是 lx,在命令行模式下:sftp lx@192.168.10.163或者 lx
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。
1、连接方法
2、缩写来源
3、sftp的使用命令
sftp 是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作。
举例,如远程主机的 IP 是 192.168.10.163或者是域名www.server.cn,用户名是 lx,在命令行模式下:sftp lx@192.168.10.163或者 lx@www.server.cn。回车提示输入密码。进入提示符
sftp>
如果登陆远程机器不是为了上传下载文件,而是要修改远程主机上的某些文件。可以
ssh lx@192.168.10.163 (其实sftp就是ssh 的一个程式。)
sftp> get /var/index.php /home/lx/
这条语句将从远程主机的 /var/目录下将 index.php 下载到本地 /home/lx目录下。
sftp> put /home/lx/downloads/linux.pdf /var/lx/
这条语句将把本地 /home/lx/downloads/目录下的 linux.pdf文件上传至远程主机/var/lx/ 目录下。
你如果不知道远程主机的目录是什么样, pwd命令可以帮你查询远程主机的当前路径;查询本机当前工作目录 lpwd 。
4、java代码实现sftp服务器的登陆连接,注销登录,上传、下载、删除文件
附带:所需jar依赖配置
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.45</version>
</dependency>
--------------------------------------------------------------
/**
* 连接sftp服务器
*
* @param host 主机
* @param port 端口
* @param username 用户名
* @param password 密码
* @return
*/
public static ChannelSftp connect(String host, int port, String username, String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session sshSession = jsch.getSession(username, host, port);
logger.debug("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
logger.debug("Session connected.");
logger.debug("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
logger.debug("Connected to " + host + ".");
} catch (Exception e) {
}
return sftp;
}
/**
* 上传文件
*
* @param directory 上传的目录
* @param uploadFile 要上传的文件
* @param sftp
*/
public static void upload(String directory, String uploadFile, ChannelSftp sftp) {
createDir(directory, sftp);
File file = new File(uploadFile);
if (!file.exists()) {
return;
}
FileInputStream fs = null;
try {
sftp.cd(directory);
fs = new FileInputStream(file);
sftp.put(fs, file.getName());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fs != null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 下载文件
*
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
* @param sftp
*/
public static boolean download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(saveFile);
FileOutputStream os = new FileOutputStream(file);
sftp.get(downloadFile, os);
os.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 删除文件
*
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
* @param sftp
*/
public static void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Disconnect with server
*/
public static void disconnect(ChannelSftp sftp) {
if (sftp != null) {
if (sftp.isConnected()) {
sftp.disconnect();
} else if (sftp.isClosed()) {
logger.debug("sftp is closed already");
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ftp简介
ftp 即 文件传输协议 。
1、工作原理
2、主要功能
3、ftp的使用命令
连接服务器:
格式:ftp [hostname| ip-address]a)在linux命令行下输入:ftp 192.168.10.163
b)服务器询问你用户名和口令,分别输入lx和相应密码,待认证通过即可。
1. 下载文件
下载文件通常用get和mget这两条命令。
a) get
格式:get [remote-file] [local-file]
将文件从远端主机中传送至本地主机中.
如要获取服务器上E:\rays\1.bmp,则
ftp> get /rays/1.bmp 1.bmp
b) mget
格式:mget [remote-files]
从远端主机接收一批文件至本地主机.
如要获取服务器上E:\rays\下的所有文件,则
ftp> cd /rays
ftp> mget *.*
注意:文件都下载到了linux主机的当前目录下。比如,在 /home/lx下运行的ftp命令,则文件都下载到了/home/lx下。
2.上传文件
a) put
格式:put local-file [remote-file]
将本地一个文件传送至远端主机中.
如要把本地的1.bmp传送到远端主机E:\rays,并改名为333.bmp
ftp> put 1.bmp /rays/333.bmp
b) mput
格式:mput local-files
将本地主机中一批文件传送至远端主机.
如要把本地当前目录下所有bmp文件上传到服务器E:\rays 下
ftp> cd /rays
ftp> mput *.bmp
注意:上传文件都来自于主机的当前目录下。比如,在/home/lx下运行的ftp命令,则只有在/home/lx下的文件linux才会上传到服务器E:\rays 下。
3. 断开连接
bye:中断与服务器的连接。
ftp> bye
4、java代码实现ftp服务器的登陆连接,注销登录,上传、下载、删除文件
附带:所需jar依赖配置
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>2.0</version>
</dependency>
上传文件到FTP服务器:
/**
* Description: 向FTP服务器上传文件
* @param url FTP服务器hostname
* @param port FTP服务器端口,如果默认端口请写-1
* @param username FTP登录账号
* @param password FTP登录密码
* @param path FTP服务器保存目录
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String url, int port, String username, String password, String path,
String filename, InputStream input)
{
boolean success = false;
FTPClient ftp = new FTPClient();
try
{
int reply;
// 连接FTP服务器
if (port > -1)
{
ftp.connect(url, port);
}
else
{
ftp.connect(url);
}
// 登录FTP
ftp.login(username, password);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
}
catch (IOException e)
{
success = false;
logger.error(EXCEPTION_NAME, e);
}
finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (IOException e)
{
logger.error(EXCEPTION_NAME, e);
}
}
}
return success;
}
从FTP服务器下载文件:
/**
* Description: 从FTP服务器下载文件
* @Version1.0 Jul 27, 2008 5:32:36 PM by 崔红保(cuihongbao@d-heaven.com)创建
* @param url FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param remotePath FTP服务器上的相对路径
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @return
*/
public static boolean downloadFile(String url, int port, String username, String password, String remotePath,
String fileName, String localPath)
{
boolean success = false;
FTPClient ftp = new FTPClient();
try
{
int reply;
// 连接FTP服务器
if (port > -1)
{
ftp.connect(url, port);
}
else
{
ftp.connect(url);
}
ftp.login(username, password);//登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs)
{
if (ff.getName().equals(fileName))
{
File localFile = new File(localPath + "/" + ff.getName());
OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
}
}
ftp.logout();
success = true;
}
catch (IOException e)
{
logger.error(EXCEPTION_NAME, e);
}
finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (IOException e)
{
logger.error(EXCEPTION_NAME, e);
}
}
}
return success;
}
删除FTP服务器上的文件:
/**
* <删除FTP上的文件>
* <远程删除FTP服务器上的录音文件>
* @param url FTP服务器IP地址
* @param port FTP服务器端口
* @param username FTP服务器登录名
* @param password FTP服务器密码
* @param remotePath 远程文件路径
* @param fileName 待删除的文件名
* @return
* @see [类、类#方法、类#成员]
*/
public static boolean deleteFtpFile(String url, int port, String username, String password, String remotePath,
String fileName)
{
boolean success = false;
FTPClient ftp = new FTPClient();
try
{
int reply;
// 连接FTP服务器
if (port > -1)
{
ftp.connect(url, port);
}
else
{
ftp.connect(url);
}
// 登录
ftp.login(username, password);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
return success;
}
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remotePath);
success = ftp.deleteFile(remotePath + "/" + fileName);
ftp.logout();
}
catch (IOException e)
{
logger.error(EXCEPTION_NAME, e);
success = false;
}
finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (IOException e)
{
logger.error(EXCEPTION_NAME, e);
}
}
}
return success;
}
更多推荐
所有评论(0)