如何使用 sftp 与远程服务器安全传输文件

  • Post author:
  • Post category:其他

关于 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/