通过 ssh 与远程服务器之间传输文件的几种方法


通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
 
我们经常会有通过 ssh 向远程服务器发送文件的时候,或者从远程服务器拷贝文件到本地的时候 。一般来讲,在本地与远程服务器之间传输文件常用的方式有如下 4 种:
1)scp:这个方法即将被弃用;
2)rsync:目前比较流行的用于文件传输的命令;
3)sshfs:通过 ssh 装载远程目录;
4)sftp 客户端:通过 sftp 访问文件的桌面工具 。
另外,对于远程服务器,你还需要知道其地址和系统访问账号(用户名、密码) 。有了这个前提之后,我们再来详细看一下这几种方法 。
方法1:使用 scp 命令通过 ssh 复制文件前面我们提到过,scp 即将被启用,但是,它仍然受到很多人喜欢,因为它的语法类似于 cp 命令 。下面我们看看如何使用 scp 命令 。
将文件从远程计算机复制到本地计算机 
通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
现在我们的任务是这样:将文件从远程服务器拷贝到本地已登录的系统中 。
这里有一个通用的语法,它将文件从远程系统上用户的主目录复制到本地登录系统的当前目录 。如下所示:
 
scp username@ip_address:/home/username/filename .
  • 1.
 
看到其与 cp 命令的相似之处了吗?除了必须使用冒号 : 指定用户名和 ip 地址之外,其他几乎是一样的 。
通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
在上面的例子中,我将文件 remote.txt 从远程服务器的 /home/abhishek/my_file 目录拷贝到本地计算机的当前目录中 。
使用这个命令,你需要知道文件在远程服务器中的完整路径,tab 键补全路径,对于远程系统来说是不起作用的 。
将本地文件拷贝到远程服务器中
通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
下面我们来看另外一个例子,使用 scp 通过 ssh 将本地的文件发送到远程服务器 。其语法如下:
 
scp filename username@ip_address:/home/username
  • 1.
 
通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
在上面的例子中,我将位于当前目录中的本地文件 local.txt 复制到了远程系统中的 abhishek 用户主目录下 。然后使用该用户登录了远程系统,以验证文件是否被成功拷贝过去 。
也可以拷贝目录
我们在前文中提到过,scp 的语法与 cp 命令类似 。所以,使用 scp 也可以拷贝目录,方法是使用 -r 选项 。如下为将本地目录拷贝到远程系统中的语法:
 
scp -r source_dir username@ip_address:/home/username/target_dir
  • 1.
 
方法2:使用 rsync 通过 ssh 复制文件和目录由于 scp 即将被弃用,rsync 是下一个通过 ssh 在远程系统之间复制文件的最佳工具 。实际上,它在很多方面都优于 scp 。
其命令语法与 scp 相同 。旧版本的 rsync 必须使用  rsync -e ssh,但是现在已经不需要了 。
将远程文件复制到本地计算机假如我们要将远程系统中的文件复制到当前已经登录到的系统中的当前目录中,其语法结构为:
 
rsync username@ip_address:/home/username/filename .
  • 1.
 
【通过 ssh 与远程服务器之间传输文件的几种方法】参考方法1 中的例子,我们将拷贝 remote.txt 到本地系统当前目录,如下图所示:
通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
将文件从本地计算机拷贝到远程系统将文件从本地拷贝到远程系统中相应目录中,语法结构如下:
 
rsync filename username@ip_address:/home/username
  • 1.
 
依然参考方法1 中的例子,我们将 local.txt 拷贝到远程系统,如下图所示:
通过 ssh 与远程服务器之间传输文件的几种方法

文章插图
那么,怎样复制目录呢?要复制目录,与 scp 一样,使用 -r 选项: