我们经常会有通过 ssh 向远程服务器发送文件的时候,或者从远程服务器拷贝文件到本地的时候。一般来讲,在本地与远程服务器之间传输文件常用的方式有如下 4 种:
1)scp:这个方法即将被弃用;
2)rsync:目前比较流行的用于文件传输的命令;
3)sshfs:通过 ssh 装载远程目录;
4)sftp 客户端:通过 sftp 访问文件的桌面工具。
另外,对于远程服务器,你还需要知道其地址和系统访问账号(用户名、密码)。有了这个前提之后,我们再来详细看一下这几种方法。
前面我们提到过,scp 即将被启用,但是,它仍然受到很多人喜欢,因为它的语法类似于 cp 命令。下面我们看看如何使用 scp 命令。
现在我们的任务是这样:将文件从远程服务器拷贝到本地已登录的系统中。
这里有一个通用的语法,它将文件从远程系统上用户的主目录复制到本地登录系统的当前目录。如下所示:
scp username@ip_address:/home/username/filename .
看到其与 cp 命令的相似之处了吗?除了必须使用冒号 : 指定用户名和 ip 地址之外,其他几乎是一样的。
在上面的例子中,我将文件 remote.txt 从远程服务器的 /home/abhishek/my_file 目录拷贝到本地计算机的当前目录中。
使用这个命令,你需要知道文件在远程服务器中的完整路径,tab 键补全路径,对于远程系统来说是不起作用的。
下面我们来看另外一个例子,使用 scp 通过 ssh 将本地的文件发送到远程服务器。其语法如下:
scp filename username@ip_address:/home/username
在上面的例子中,我将位于当前目录中的本地文件 local.txt 复制到了远程系统中的 abhishek 用户主目录下。然后使用该用户登录了远程系统,以验证文件是否被成功拷贝过去。
也可以拷贝目录
我们在前文中提到过,scp 的语法与 cp 命令类似。所以,使用 scp 也可以拷贝目录,方法是使用 -r 选项。如下为将本地目录拷贝到远程系统中的语法:
scp -r source_dir username@ip_address:/home/username/target_dir
由于 scp 即将被弃用,rsync 是下一个通过 ssh 在远程系统之间复制文件的最佳工具。实际上,它在很多方面都优于 scp。
其命令语法与 scp 相同。旧版本的 rsync 必须使用 rsync -e ssh,但是现在已经不需要了。
假如我们要将远程系统中的文件复制到当前已经登录到的系统中的当前目录中,其语法结构为:
rsync username@ip_address:/home/username/filename .
参考方法1 中的例子,我们将拷贝 remote.txt 到本地系统当前目录,如下图所示:
将文件从本地拷贝到远程系统中相应目录中,语法结构如下:
rsync filename username@ip_address:/home/username
依然参考方法1 中的例子,我们将 local.txt 拷贝到远程系统,如下图所示:
要复制目录,与 scp 一样,使用 -r 选项:
rsync -r source_dir username@ip_address:/home/username/target_dir
看下面的例子,我复制远程系统中的目录 my_file 到本地系统中:
rsync是一种通用工具。它本质上是一个在两个目录之间“递归同步”内容的工具,在进行自动备份时很受欢迎。
SSHFS(SSH文件系统)可用于访问远程文件和目录。但是,这对于复制文件来说不是很方便。
这种方法,我们可以在本地系统上加载远程目录,然后就可以在这个目录和本地系统之间复制文件。这相当于 windows 系统中的远程桌面的概念。
sshfs 在使用之前需要先安装,在 Debian 或者 Ubuntu 中,可以使用如下命令:
sudo apt install sshfs
安装完成之后,就可以使用 sshfs 了。一个好的习惯是为其专门创建一个目录:
mkdir mount_dir
然后使用如下方式在远程计算机上,加载此目录:
sshfs username@IP_address:path_to_dir mount_dir
加载完成后,就可以将文件复制到这个目录中,或者在这个目录中复制文件到其他目录,就想它在本地计算机中一样。
cp local_file mount_dir
需要注意的是,装载此目录进行工作,工作完成后,还需要卸载它:
umount mount_dir
下图中的例子,我在本地计算机中新建了一个目录 remote_dir,然后将远程系统中的 my_file 目录装载到本地的 remote_dir 目录中,然后将 remote.txt 文件复制到本地系统,最后卸载该目录:
最后一个我们将要介绍的方法,是可以使用 FTP 客户端在远程和本地系统之间传输文件。
FileZilla 是最流行的跨平台FTP客户端之一,安装和使用都很方便。
安装完成后,找到 File -> Site Manager(文件->站点管理器),添加远程系统详细信息,如 IP 地址、SSH 端口号、用户名和密码等。如下图所示:
连接成功后,窗口会分为左右两个部分,左边为本地文件系统,右侧显示远程文件系统:
拷贝文件的方式也很简单,直接从左边向右边拖拽文件,即可将本地文件复制到远程系统中;反过来,从右侧拖拽文件到左侧,即复制远程系统中的文件到本地计算机。复制过程中,在窗口底部会显示进度条。