如何使用 SFTP 安全地传输文件

什么是 SFTP ?

在了解 SFTP 之前,我们先看看什么是 FTP 。FTP( File Transfer Protocol )文件传输协议,是一种常用来在两终端系统之间传输文件的方法。

SFTP ,即 SSH 文件传输协议( SSH File Transfer Protocol ),或者说是安全文件传输协议( Secure File Transfer Protocol )。SFTP 是一个独立的 SSH 封装协议包,通过安全连接以相似的方式工作。它的优势在于可以利用安全的连接传输文件,还能遍历本地和远程系统上的文件系统。

在大多数情况下,优先选择 SFTP 而不是 FTP ,原因在于 SFTP 最基本的安全特性和能利用 SSH 连接的能力。FTP 是一种不安全的协议,应当只有在特定的情况下或者你信任的网络中使用。

虽然 SFTP 集成了很多图形工具,但是这一篇使用指南会演示如何使用交互式命令行界面来使用它。以下就是使用指南。

如何使用 SFTP 连接

在默认情况下, SFTP 使用 SSH 协议进行身份验证并建立安全连接。正因如此,相同的存在于 SSH 中的验证方法是可用的。

尽管通过默认的方式,使用和设置密码很方便,我们还是强烈建议你建一个 SSH 密钥,把你的公钥传给你需要访问的所有系统。长远来看,这样会更加安全,也节省你的时间。

如果你还没有设置 SSH 密钥,请点击这里查看设置 SSH 密钥指南来设置你的 SSH 密钥,以便访问你的服务器。

如果你能使用 SSH 连接到你的主机上的话,那么你已经完成所有必要的使用 SFTP 来管理你的文件的要求了。使用下面的命令来测试 SSH 访问:

ssh username@remote_hostname_or_IP

如果上一条命令成功,输入这个的命令退出:

exit

建立一个 SSH 连接打开一个 SFTP 会话。这个过程可使用下面命令:

sftp username@remote_hostname_or_IP

这样,你就连接上远程系统了,你的提示符也会变为 SFTP 提示符。

在 SFTP 命令行中查看帮助文档

老规矩,先了解最有用的命令—— help ,它会提供给你 SFTP 的帮助概览。你可以输入下面两个中的任何一个来打开帮助:

help

?

之后,会显示如下可使用的命令列表:

Available commands: bye Quit sftp cd path Change remote directory to 'path' chgrp grp path Change group of file 'path' to 'grp' chmod mode path Change permissions of file 'path' to 'mode' chown own path Change owner of file 'path' to 'own' df [-hi] [path] Display statistics for current directory or filesystem containing 'path' exit Quit sftp get [-Ppr] remote [local] Download file help Display this help text lcd path Change local directory to 'path' . . .

接下来,我们会探讨以上某些命令。

SFTP Shell 基本操作

我们可以使用大部分类似在本机 Shell 的命令来浏览整个目录结构。

首先,我们要确定当前工作目录,怎么确定呢?与大部分的 Shell 会话类似的可以输入以下命令来获取当前目录信息:
pwd

Remote working directory:/home/demouser

另一个熟悉的命令—— ls,查看当前目录下的内容

ls

Summary.txt    info.txt    temp.txt    testDirectory

值得注意的是, SFTP 的命令行没有像 Bash 这样的一般 Shell 功能丰富,只是选择性的实现了一些重要参数:

ls -la

drwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 . drwxr-xr-x 3 root root 4096 Aug 13 15:02 .. -rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history -rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout -rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache -rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile . . .

使用下面的命令可以切换到另一个目录:

cd testDirectory

现在我们就可以遍历远程文件系统了!但是如果我们需要访问本地文件系统,要怎么办呢?我们只需要给刚才的这些命令加一个前缀“ l ”( L 的小写),即可实现对本地主机操作。

到目前为止,我们谈到的所有命令都有对应的本地版,我们可以这样打印出本地主机工作目录:

lpwd

Local working directory:/Users/demouser

同样,我们这样可以列出本机上当前工作目录的内容:

lls

Desktop local.txt test.html Documents analysis.rtf zebra.html

显然,我们也可以很方便的在一个 Shell 里任意切换本地主机和远程主机的当前工作目录:

lcd Desktop

使用 SFTP 传输文件

仅仅访问两个文件系统之间的内容却不能在本地和远程文件系统之间传输文件,那简直就是牛鼎烹鸡。

下载远程文件到本地主机

如果我们想从远程主机上下载文件,跟着我这样做:

get remote_file_name

Fetching /home/demouser/remoteFile to remote_file_name /home/demouser/remote_file_name 100% 37KB 36.8KB/s 00:01

正如你看到的,在默认情况下,“ get ”命令把远程主机上的文件下载到本地主机而且保证文件名不变。

想改变名字?没问题!直接指定一个不同的文件名来复制远程文件即可:

get remote_file_name local_file_name

说到这里,不得不告诉你,“ get ”命令还有一些可选参数。比如,我们可以打开递归选项来递归的复制一个文件夹里面的内容:

get -r some_directory_name

我们还可以打开“ -P ”或者“ -p ”参数来告诉 SFTP 保持文件的权限访问位的设置和访问时间:

get -Pr some_directory_name

上传本地文件到远程主机

使用见名知意的“ put ”命令可以很容易的将文件上传到远程主机:

put local_file_name

Uploading localFile to /home/demouser/local_file_name local_file_name 100% 7607 7.4KB/s 00:00

” put “具有类似“ get ”的参数。这样,你可以上传整个文件夹:

put -r local_directory_name

注意

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/58723f9e3e239fde8d0efebeb5178aa9.html