如何使用 SFTP 与远程服务器传输文件

在 《如何使用 SFTP 与远程服务器进行交互》 这篇文章中,我们介绍了 SFTP 与服务器进行连接和交互的方式。下面我们主要看一下,在建立了连接之后,该如何进行主要的操作——文件传输。

使用 SFTP 传输文件

如果我们想从远程主机下载文件,可以使用 get 命令:

sftp> get remoteFile

下载过程以及下载成功的输出内容如下

Fetching /home/demouser/remoteFile to remoteFile

/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:

可以看到,默认情况下,get 命令将远程文件下载到本地文件系统上的同名文件中。

我们可以通过在之后指定名称来将远程文件复制成不同的名称:

sftp> get remoteFile localFile

get 命令还可以跟一些参数。 例如,我们可以通过指定递归选项(-r)来复制目录及其所有内容:

sftp> get -r someDirectory

我们可以使用 -P 或 -p 标志告诉 SFTP 保留适当的权限和访问时间:

sftp> get -Pr someDirectory

将本地文件传输到远程系统 (上传文件)

将文件传输到远程系统的工作方式和下载相同,但是我们要使用 put 命令:

sftp> put localFile

上传过程以及上传成功的输出内容如下

Uploading localFile to /home/demouser/localFile

localFile 100% 7607 7.4KB/s 00:00

与 get 一起使用的选项也适用于 put。 所以要复制整个本地目录,可以运行 put -r

sftp> put -r localDirectory

下载和上传文件时有用的一种熟悉的工具是 df 命令,它的工作方式与命令行中的类似。 使用它,我们可以检查是否有足够的空间来完成我们的传输:

sftp> df -h

输出结果如下

Size Used Avail (root) %Capacity

19.9GB 1016MB 17.9GB 18.9GB 4%

注意,此命令不能直接用于查看本地的空间,但我们可以通过使用 ! 命令。

命令将我们放入本地 shell,我们可以在其中运行本地系统上可用的任何命令。 我们可以通过键入以下内容来检查磁盘使用情况:

sftp> !

然后再使用下面的命令即可

$ df -h

这时就可以查看我们的本地系统的空间了

Filesystem Size Used Avail Capacity Mounted on

/dev/disk0s2 595Gi 52Gi 544Gi 9% /

devfs 181Ki 181Ki 0Bi 100% /dev

map -hosts 0Bi 0Bi 0Bi 100% /net

map auto_home 0Bi 0Bi 0Bi 100% /home

任何其他本地命令都将正常工作。 要返回我们的 SFTP 会话,使用下面的命令:

$ exit

现在应该会看到 SFTP 提示符,表示我们已经返回了。


使用 SFTP 进行简单的文件操作

SFTP 允许我们执行某些类型的文件系统管理。 例如,可以使用以下命令更改远程系统上文件的所有者:

sftp> chown userID file

请注意,与系统 chmod 命令不同,SFTP 命令不接受用户名,而是使用 UID。 不幸的是,没有内置方法可以从 SFTP 界面中了解适当的 UID。

作为一种解决方法,可以从 /etc/passwd 文件中读取,该文件在大多数 Linux 环境中将用户名与 UID 相关联:

sftp> get /etc/passwd

sftp> !less passwd

输出结果如下所示

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

. . .

注意上面的第二个命令,不用单独使用 ! 命令,我们使用它作为本地 shell 命令的前缀。 这可以运行我们本地机器上可用的任何命令,并且之前可以与本地 df 命令一起使用。

UID 将位于文件的第三列,由冒号字符表示。

同样,我们可以通过以下方式更改文件的组所有者:

sftp> chgrp groupID file

同样,没有内置方法可以获取远程系统组的列表。 我们可以使用以下命令解决这个问题:

sftp> get /etc/group

sftp> !less group

输出结果如下

root:x:0:

daemon:x:1:

bin:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

lp:x:7:

. . .

第三列包含与第一列中名称关联的组的 ID。 这就是我们要寻找的。

chmod SFTP 命令在远程文件系统上正常工作:

sftp> chmod 777 publicFile

Changing mode on /home/demouser/publicFile

没有对等的操作本地文件权限的命令,但是可以设置本地的 umask ,这样任何复制到本地系统的文件都会有相应的权限。

这可以通过 lumask 命令完成:

sftp> lumask 022

Local umask: 022

现在所有下载的常规文件(只要不使用 -p 标志)将具有 644 权限。

SFTP 还允许我们分别使用 lmkdirmkdir 在本地和远程系统上创建目录。

其余文件命令仅针对远程文件系统:

sftp> ln

sftp> rm

sftp> rmdir

这些命令复制了它们的 shell 等效命令的核心功能。 如果需要在本地文件系统上执行这些操作,请记住可以通过使用以下命令进入 shell:

sftp> !

或者通过在命令前加上 !,从而可以在本地系统上执行单个命令 像这样:

sftp> !chmod 644 somefile

完成 SFTP 会话后,使用 exit 或 bye 关闭连接。

sftp> bye

总结

尽管 SFTP 语法远不如现代 shell 工具全面,但它对于提供与传统 FTP 语法的兼容性或谨慎限制某些环境的远程用户可用的功能是很有帮助的。

例如,我们可以使用 SFTP 使特定用户能够在没有 SSH 访问权限的情况下传输文件。

本文转载自:迹忆客(https://www.jiyik.com)

以上是 如何使用 SFTP 与远程服务器传输文件 的全部内容, 来源链接: utcz.com/z/290267.html

回到顶部