Kali中SCP 和 SFTP命令 详细指南

在实际工作中,我们需要将文件上传到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用于加密连接的程序名称。该程序必须了解 ssh(1) 选项。

-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 的功能更简单一些。

更多文章 关注我们

请使用浏览器的分享功能分享到微信等