1 scp 命令
scp 命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令。使用 SSH 意味着它享有与 SSH 相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。
以下是scp命令常用的几个选项:
- -C:这会在复制过程中压缩文件或目录。
- -P(大写):如果默认 SSH 端口不是 22,则使用此选项指定 SSH 端口。
- -r :此选项递归复制目录及其内容。
- -p(小写):保留文件的访问和修改时间。
现有两台服务器:
本地服务器IP地址:192.168.72.10
远程服务器IP地址:192.168.72.129
1.1 将文件从本地复制到远程Linux服务器
命令格式:
scp [选项] 本地文件路径 [用户名@]远程服务器ip:目标路径
示例:
将本地文件/data/aa/mbr.bak,复制到远程服务器的/beifen01目录下。远程主机IP为192.168.72.129。
[root@localhost ~]# scp /data/aa/mbr.bak 192.168.72.129:/beifen01
root@192.168.72.129's password:
mbr.bak 100% 512 236.4KB/s 00:00
查看远程主机,已成功复制。
[root@192 ~]# ls /beifen01
mbr.bak
1.2 将文件从远程系统复制到本地
命令格式:
scp [选项] [用户名@]远程服务器ip:文件路径 本地路径
示例:
将远程服务器的/etc/passwd 文件,复制到本地系统的/backup目录下。
[root@localhost ~]# scp 192.168.72.129:/etc/passwd /backup
root@192.168.72.129's password:
passwd 100% 2107 80.0KB/s 00:00
[root@localhost ~]# ls /backup
passwd
2 ftp 命令
2.1 FTP介绍
FTP(文件传输协议)是用于与远程网络之间传输文件的标准网络协议。 基于C/S结构。
数据传输格式:二进制(默认)和文本。
双通道协议:命令和数据连接。
两种模式(从服务器角度):
- 主动(PORT style):服务器主动连接
命令(控制)端口: 客户端:随机port ---> 服务器:21/tcp
数据端口: 客户端:随机port <--- 服务器:20/tcp
- 被动(PASV style):客户端主动连接
命令(控制)端口: 客户端:随机port ---> 服务器:21/tcp
数据端口: 客户端:随机port ---> 服务器:随机port /tcp
FTP服务状态码:
1XX:信息。例如,125:数据连接打开
2XX:成功类状态。例如,200:命令OK,230:登录成功
3XX:补充类。例如,331:用户名OK。
4XX:客户端错。例如,425:不能打开数据连接。
5XX:服务器错误。例如,530:不能登录。
FTP服务程序:
服务端安装 vsftpd 软件包,vsftpd是“very secure FTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。
客户端安装FTP程序,安装后才能使用ftp命令。
vsftpd 软件配置文件详解:
位置/etc/vsftpd/vsftpd.conf (使用rpm -qc vsftpd 可查看配置文件地址)
anonymous_enable=YES //支持匿名用户访问(CentOS8 默认不允许匿名);
#no_anon_password=YES //匿名用户login时不询问口令。如果希望不询问口令,需要自己添加
#anon_upload_enable=YES //是否允许上传文件,注意:文件系统权限。默认是被注释的。
anon_mkdir_write_enable=YES //允许匿名用户新建目录
local_enable=YES //启用本地系统用户访问;
write_enable=YES //本地系统用户写入权限;
local_umask=022 //本地用户创建文件及目录默认权限掩码;
dirmessage_enable=YES //打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
xferlog_enable=YES //启用上传和下载日志记录;
connect_from_port_20=YES //FTP使用20端口进行数据传输;
xferlog_std_format=YES //日志文件将根据xferlog的标准格式写入;
listen=NO //Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES;
listen_ipv6=YES //启用IPV6监听;
pam_service_name=vsftpd //登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
userlist_enable=YES //vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP;
tcp_wrappers=YES //设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。
注:
用户ftp和anonymous都属于匿名用户。
2.2 应用示例
2.2.1 实验一、将服务端的文件拷贝到本地
实验内容:
客户端IP为192.168.72.10,服务端IP为192.168.72.129。
需要将服务端中的 /f1.txt 文件拷贝到客户端。
实验思路:
1、服务端,安装 vsftpd 软件包。
2、服务端,启动 vsftpd 服务,检查21端口是否开启。
并将 /f1.txt 文件复制到/var/ftp 目录下。(/var/ftp 是程序用户ftp的家目录)
3、客户端,安装ftp工具。
4、客户端,使用 ftp 命令从服务端中将f1.txt拷贝到本地。
实验步骤:
步骤1、Linux虚拟机关闭防火墙和selinux。
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
步骤2. 服务端安装vsftpd软件包。安装后系统会自动创建程序用户ftp,家目录为/var/ftp。
[root@localhost ~]# yum install vsftpd -y //安装vsftpd软件包
[root@localhost ~]# grep ftp /etc/passwd //系统自动创建程序用户ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
步骤3. 启动vsftpd服务,确认21端口已开启。并将 /f1.txt 文件复制到/var/ftp 目录下。
[root@localhost ~]# yum install vsftpd[root@localhost ~]# ss -ntap |grep 21
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# ss -ntap |grep 21
LISTEN 0 32 :::21 :::* users:(("vsftpd",pid=91601,fd=3))
[root@192 ~]# cp /f1.txt /var/ftp
[root@192 ~]# ls /var/ftp
f1.txt opt opt.tar.gz pub shadow
步骤4. 客户端,安装 ftp 程序。
[root@localhost ~]# yum install ftp -y
步骤5. 客户端,使用 ftp 命令从服务端中将f1.txt拷贝到本地。
[root@localhost ~]# ftp 192.168.72.129 //使用ftp连接到服务端
Connected to 192.168.72.129 (192.168.72.129).
220 (vsFTPd 3.0.2)
Name (192.168.72.129:root): ftp //用户填写ftp
331 Please specify the password.
Password: //输入服务端root用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls //成功连接后进入/var/ftp目录,可查看目录内容
227 Entering Passive Mode (192,168,72,129,214,119).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 14 14:45 f1.txt
drwxr-xr-x 3 0 0 29 Mar 14 14:42 opt
-rw-r--r-- 1 0 0 131 Mar 14 14:05 opt.tar.gz
drwxr-xr-x 2 0 0 6 Jun 09 2021 pub
---------- 1 0 0 1194 Mar 14 11:56 shadow
226 Directory send OK.
ftp> help //输入help可查看命令帮助
Commands may be abbreviated. Commands are:
! debug mdir sendport site
$ dir mget put size
account disconnect mkdir pwd status
append exit mls quit struct
ascii form mode quote system
bell get modtime recv sunique
binary glob mput reget tenex
bye hash newer rstatus tick
case help nmap rhelp trace
cd idle nlist rename type
cdup image ntrans reset user
chmod lcd open restart umask
close ls prompt rmdir verbose
cr macdef passive runique ?
delete mdelete proxy send
ftp> get f1.txt //将服务端f1.txt下载到本地
local: f1.txt remote: f1.txt
227 Entering Passive Mode (192,168,72,129,131,24).
150 Opening BINARY mode data connection for f1.txt (0 bytes).
226 Transfer complete.
ftp> quit //退出ftp连接
221 Goodbye.
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 视频 文档 音乐
f1.txt yuji 模板 图片 下载 桌面
2.2.2 实验二、将客户端的文件上传到服务端
实验要求:
将客户端的/root/f6 文件上传到服务端。
实验步骤:
步骤1. 服务端,修改配置文件/etc/vsftpd/vsftpd.conf,允许匿名用户上传文件。
[root@192 pub]# vim /etc/vsftpd/vsftpd.conf
------------------------------
29 anon_upload_enable=YES
步骤2. 服务端,设置/var/ftp/pub目录的权限为777。程序用户ftp对pub目录必须拥有写入和执行权限。
[root@192 ftp]# cd pub
[root@192 pub]# ls -dl
drwxrwxr-x. 2 root root 6 3月 15 10:20 .
[root@192 pub]# chmod 777 /var/ftp/pub
[root@192 pub]# ls -dl
drwxrwxrwx. 2 root root 6 3月 15 10:20 .
步骤3. 客户端,使用 ftp 命令从将 f6 文件到传输给服务端。
[root@localhost ~]# ftp 192.168.72.129
Connected to 192.168.72.129 (192.168.72.129).
220 (vsFTPd 3.0.2)
Name (192.168.72.129:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> put f6
local: f6 remote: f6
227 Entering Passive Mode (192,168,72,129,53,222).
150 Ok to send data.
226 Transfer complete.
ftp> ls
227 Entering Passive Mode (192,168,72,129,205,2).
150 Here comes the directory listing.
-rw------- 1 14 50 0 Mar 15 02:31 f6
226 Directory send OK.
ftp> quit
221 Goodbye.
2.3 ftp总结
- 一定要关闭防火墙和selinux。
- 使用get从服务端下载文件时,用户ftp对该文件必须拥有r权限(即读取权限),否则无法下载。例如/etc/passswd 文件,普通用户没有读取权限,无法下载该文件。
- get和put 不支持对目录文件进行下载和上传,必须先使用tar命令将目录进行归档压缩,之后才能下载或上传。
- 用户ftp对/var/ftp目录,不能拥有w权限,否则ftp用户不能登录访问。
- ftp用户在/var/ftp/pub目录下上传文件时,必须对pub目录拥有wx权限(即写入和执行权限),否则上传文件会提示失败,不支持创建文件,因为没有写入权限。
- put 上传文件时,不支持绝对路径,想要上传的文件必须在客户端的当前目录内。 例如当前是在/root目录下使用ftp连接服务端,想要上传/tmp/file01文件,必须先将file01复制到/root目录下,之后使用“put file01”或“put ./file01”命令删上传,不支持“put /tmp/file01"这种格式 。