在实际工作中,我们需要将文件上传到Linux中,或者将Linux中的文件下载到本地。如何实现呢?
SCP的全称是Secure Copy,通过SSH进行文件的复制。Linux 中使用man scp命令可以查看 SCP 命令的帮助信。
关于SCP
scp 在网络上的主机之间复制文件。它使用 ssh进行数据传输,使用与 ssh相同的身份验证,并提供相同的安全性。文件名可能包含用户和主机格式,用来指示要将文件复制到该主机,或从该主机复制文件。用绝对或相对路径名来明确显示本地文件名,scp 命令也允许在两个远程主机之间复制。
命令的选项如下:
scp -h
scp: unknown option -- h
usage: scp [-346ABCOpqRrsTv] [-c cipher] [-D sftp_server_path] [-F ssh_config]
[-i identity_file] [-J destination] [-l limit]
[-o ssh_option] [-P port] [-S program] source ... target
参数说明:
-3 两个远程主机之间的复制是通过本地主机传输的。如果没有这个选项,数据会直接在两个远程主机之间复制。请注意,此选项将禁用进度条。
-4 强制 scp 只使用 IPv4 地址。
-6 强制 scp 只使用 IPv6 地址。
-B 使用批处理模式(防止询问密码或口令)。其实这里的「批处理模式(batch mode)」就是后台运行模式,不使用交互界面。
-C 启用压缩。
-c
-F [ssh_config] 为 ssh 指定一个可供选择的每个用户配置文件。
-i
-l Kbit/s 为单位。
-P port 指定远程主机上要连接的端口。注意,这个选项用大写的 P 来写,因为 -p 已经为保存文件的时间和模式保留了。
-p 保留原始文件的修改时间、访问时间和模式。
-q 静音模式:禁用进度表以及来自 ssh的警告和诊断信息。
-r 递归地复制整个目录。请注意,scp 遵循树形遍历中遇到的符号链接。
-S
-T 禁用严格的文件名检查。默认情况下,当从远程主机复制文件到本地目录时,scp 会检查接收到的文件名是否与命令行中请求的文件名一致,以防止远程端发送意外的或不需要的文件。
-v Verbose 模式。使 scp 和 ssh 打印关于其进度的调试信息。
牛刀小试
场景一:上传文件
需要复制本地Linux目录下的 /root/hs 文件夹中的所有文件到远程服务器 /root/bbs 文件夹中。
scp -r -C /root/hs/* root@192.4.43.190:/root/bbs
输入远程服务器的密码,便将文件进行上传。
场景二:从服务器下载文件
下载和上传的区别就是把路径的前后位置换过来了。将服务器/root/tool目录下的文件下载到本地/root/hs文件中。
scp -r -C root@192.4.43.190:/root/tool /root/hs
SFTP传输文件
SFTP(Secure File Transfer Protocol,安全文件传输协议)是一种基于可靠数据流(data stream),提供文件存取和管理的网络传输协议。
登录服务器
#命令格式
sftp user_name@remote_server_address[:path]
#示例
sftp root@192.4.43.190
连接成功后将进入一个 SFTP 的解释器,可以发现命令行提示符变成了 sftp>,使用 exit 命令可以退出连接。
如果连接地址存在 path 并且 path 不是一个目录,那么 SFTP 会直接从服务器端取回这个文件。显示当前的工作目录:
sftp> pwd
Remote working directory: /
查看当前目录的内容:
sftp> ls
bbskali.txt 大表哥.html kali黑客笔记.txt
使用 -la参数可以以列表形式查看,并显示隐藏文件:
drwxr-xr-x 4 root root 4096 Feb 2 20:30 .
dr-xr-x--- 10 root root 4096 Jun 22 08:32 ..
-rw-r--r-- 1 root root 3465183 Dec 7 2021 clash.gz
drwxrwxrwx 3 mysql 116 4096 Apr 22 09:59 frp
-rw-r--r-- 1 root root 8695632 Mar 2 2021 frp_0.35.1_linux_amd64.tar.gz
drwx------ 14 root root 4096 Feb 2 20:35 modsecurity-2.9.3
-rw-r--r-- 1 root root 4307670 Dec 5 2018 modsecurity-2.9.3.tar.gz
-rwxrwxrwx 1 root root 23501 Dec 13 2021 openvpn-install.sh
-rwxr-xr-x 1 root root 4699 Nov 26 2021 xin.sh
切换目录
sftp> cd tool
建立文件夹:
sftp> mkdir kali
从远程服务器拉取文件
使用 get 命令可以从远程服务器拉取文件到本地:
sftp> get remoteFile [newName]
如果不指定 newName,将使用和远程服务器相同的文件名。
使用 -r 参数可以拉取整个目录:
sftp> get -r bbskali
上传文件
使用 put 命令可以从本地上传文件到服务器:
sftp> put localFile
同样的,可以使用 -r 参数来上传整个目录,但是有一点要注意,如果服务器上不存在这个目录需要首先新建:
sftp> mkdir tool
sftp> put -r tool
其他
SCP 和 SFTP 这两个命令有什么区别?
前面说过,SCP 的全称是 Secure Copy,而 SFTP 的全称是 SSH File Transfer Protocol,可见,两者可以实现的功能是大致相同的,SCP 的功能更简单一些。
更多文章 关注我们