关于 FTP
在了解 SFTP 之前,我们先看看什么是 FTP 。**FTP( File Transfer Protocol )**文件传输协议,是一种常用来在两终端系统之间传输文件的方法。
关于 SFTP
SFTP ,即 SSH 文件传输协议( SSH File Transfer Protocol ),或者说是安全文件传输协议( Secure File Transfer Protocol )。SFTP 是一个独立的 SSH 封装协议包,通过安全连接以相似的方式工作。它的优势在于可以利用安全的连接传输文件,还能遍历本地和远程系统上的文件系统。
在大多数情况下,优先选择 SFTP 而不是 FTP ,原因在于 SFTP 最基本的安全特性和能利用 SSH 连接的能力。FTP 是一种不安全的协议,应当只有在特定的情况下或者你信任的网络中使用。
如何使用 SFTP 连接
如果你能使用 SSH 连接到你的主机上的话,那么你已经完成所有必要的使用 SFTP 来管理你的文件的要求了。使用下面的命令来测试 SSH 访问:
ssh username@remote_hostname_or_IP
例如,我名字为 furuiyang 的用户在远程服务器 139.9.193.142 开放 9528 端口作为 ssh 服务。
前提已经设置了 SSH 秘钥。 (详情见 : https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-2)
同理, 建立一个 SSH 连接打开一个 SFTP 会话。这个过程可使用下面命令:
sftp username@remote_hostname_or_IP
这样,你就连接上远程系统了,你的提示符也会变为 SFTP 提示符。
这样,我们就连上远程系统了。
查看帮助文档
键入 help 或者 ? 来获取帮助文档:
基本操作
ls:查看远程当前路径下的内容。
ls -la: SFTP 的命令行没有像 Bash 这样的一般 Shell 功能丰富,只是选择性的实现了一些重要参数。
cd target_dir: 切换路径。
现在我们就可以遍历远程文件系统了!但是如果我们需要访问本地文件系统,要怎么办呢?我们只需要给刚才的这些命令加一个前缀“ l ”( L 的小写),即可实现对本地主机操作。
使用 SFTP 来进行文件传输
首先,在远程简单创建一批测试数据:
在本地创建测试文件夹 local_dir, 并且由此进行 sftp 连接:
下载远程文件到本地主机:
get remote_file_name
正如你看到的,在默认情况下,“ get ”命令把远程主机上的文件下载到本地主机而且保证文件名不变。
想改变名字?没问题!直接指定一个不同的文件名来复制远程文件即可:
get remote_file_name local_file_name
“ get ”命令还有一些可选参数。比如,我们可以打开递归选项来递归的复制一个文件夹里面的内容:
get -r some_directory_name
我们在远程的目录中再创建一个文件夹 my_dir, 并且在其中加入三个文件: test1.txt, test2.txt, test3.txt。 如下图所示:
我们还可以打开“ -P ”或者“ -p ”参数来告诉 SFTP 保持文件的权限访问位的设置和访问时间:
get -Pr some_directory_name
如图可以看到 keep_my_dir 保持了 my_dir 的时间戳等信息。
上传本地文件到远程主机,类似地,我们只需要将 get 改为 put 即可。
在我们下载和上传文件时使用到一个大家熟知而且很有用的工具——“ df ”命令,和其他命令行里工作方式相同。通过它,你可以检查是否有足够的空间来完成你想要传输的文件。
这个命令没有对应的 ldf ,但我们可以使用“ ! ”这个命令达到相同目的。
使用 !在两个终端之间进行切换:
原文链接
https://linuxstory.org/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server/