SCP
SCP(Secure Copy Protocol)是一种用于在网络上安全地传输文件的协议。它依赖于SSH(Secure Shell)协议来保证数据传输的安全性。SCP通常用于在两台计算机之间复制文件,无论它们是否在同一个网络中。
以下是使用SCP的基本步骤:
1. 安装SSH客户端和SCP
在大多数Linux和Unix系统中,SSH和SCP默认安装。
2. 使用SCP命令
SCP命令的基本格式如下:
scp [选项] [源路径] [目标路径]
从本地复制到远程:
scp /path/to/local/file username@remotehost:/path/to/remote/directory
从远程复制到本地:
scp username@remotehost:/path/to/remote/file /path/to/local/directory
3. 输入密码或使用SSH密钥
如果使用用户名和密码进行远程连接,需要输入密码。
如果设置了SSH密钥,则可以无密码登录。
4. 进阶使用
使用
-r
选项递归复制整个目录。使用
-p
选项保留原始文件的修改时间和访问权限。使用
-q
选项禁止显示进度和错误信息。使用
-C
选项启用压缩,加快传输速度。使用
-P
选项用于指定远程SSH端口号(默认是22)。
如:scp -P 端口号 本地文件 远程用户名@远程服务器IP或主机名:远程目录
更详细的参数设置可man scp
。
5. 注意事项
确保有在远程机器上写入文件的权限。
路径中的空格和特殊字符可能需要转义或用引号括起来。
6. 使用SSH密钥连接
使用SCP进行基于密钥的身份验证传输文件,需要在本地计算机上生成一个SSH密钥对,并将公钥复制到远程服务器的相应位置。操作过程:
① 在本地计算机上生成SSH密钥对(如果还没有的话)
在本地计算机的命令行中运行:
ssh-keygen
按照提示操作。这将在默认情况下在~/.ssh/
目录下创建一对密钥文件,通常是id_rsa
(私钥)和id_rsa.pub
(公钥)。
② 将公钥复制到远程服务器
可以手动复制公钥内容到远程服务器的~/.ssh/authorized_keys
文件中,或者使用ssh-copy-id
命令自动完成:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remotehost
会要求输入远程服务器用户的密码。
③ 使用SCP传输文件
现在,使用SCP传输文件时,系统会尝试使用私钥进行身份验证。例如,要将文件从本地复制到远程服务器:
scp -i ~/.ssh/id_rsa /path/to/local/file username@remotehost:/path/to/remote/directory
如果私钥不在默认位置,或者有多个密钥,需要使用-i
选项来指定私钥文件的路径。
如果远程主机上配置了不同的端口,还可以使用-P
参数来指定SSH端口:
scp -i ~/.ssh/id_rsa -P port_number /path/to/local/file username@remotehost:/path/to/remote/directory
④ 注意事项
确保远程服务器上的
~/.ssh/
目录和~/.ssh/authorized_keys
文件的权限设置正确。通常,~/.ssh/
目录应该是700(即drwx------
),authorized_keys
文件应该是600(即-rw-------
)。确保SSH服务配置(通常是
/etc/ssh/sshd_config
文件)允许基于密钥的身份验证(通常是PubkeyAuthentication yes
)。如果在远程服务器上禁用了密码认证,确保
PasswordAuthentication
设置为no
。
RSYNC
rsync
是 Linux 系统中一个非常强大的文件同步和备份工具。它被广泛用于高效地复制和同步文件和目录到不同的位置,既可以在本地也可以在网络上。以下是 rsync
在 Linux 服务器上的基本用法:
基础语法
rsync [options] /path/to/local/dir or file username@remotehost:/path/to/remote/dir
options:
-a
(archive): 归档模式,保留文件的权限、时间戳、软硬链接和空目录。-v
(verbose): 详细模式,输出更多信息。-z
(compress): 使用压缩传输文件数据。-r
(recursive): 递归复制整个目录。--delete
: 删除目标目录中源目录不存在的文件。-e
: 指定使用的远程shell,例如使用 SSH。--progress
: 显示传输过程中的进度信息。--exclude
: 排除不需要同步的文件或目录。
示例
本地复制:从一个目录复制到另一个目录
rsync -av /path/to/local/dir user@remotehost:/path/to/remote/dir
远程同步:将本地目录同步到远程服务器
rsync -avz /path/to/local/dir user@remotehost:/path/to/remote/dir
从远程服务器拉取文件:
rsync -avz user@remotehost:/path/to/remote/dir /path/to/local/dir
排除文件:同步时排除特定文件或目录
rsync -av --exclude 'file1.txt' --exclude 'dir1/' /path/to/local/dir user@remotehost:/path/to/remote/dir
删除目标中多余的文件:
rsync -av --delete /path/to/local/dir user@remotehost:/path/to/remote/dir
使用 SSH:通过 SSH 进行远程同步
rsync -avz -e ssh /path/to/local/dir user@remotehost:/path/to/remote/dir
注意事项
确保目的地路径后面的斜杠(/)的使用正确,它会影响复制的目录结构。
使用 SSH 时,确保在源和目标机器上都安装了 SSH,并且用户有适当的权限。
对于大型文件同步,考虑使用
--partial
(允许部分传输的文件继续传输)和--bwlimit
(限制带宽)选项。
更深入的使用和选项,可以查阅 rsync
的官方文档或相关教程。
FTP
搭建FTP服务器:
1. 安装vsftpd:
在Ubuntu上安装:
sudo apt-get update sudo apt-get install vsftpd
在CentOS/RHEL上安装:
sudo yum install vsftpd
2. 配置vsftpd:
默认情况下,vsftpd的配置文件通常位于/etc/vsftpd.conf
。以下是一些常见的配置选项:
禁用匿名访问(确保只有经过身份验证的用户可以访问):
anonymous_enable=NO
启用本地用户的访问:
local_enable=YES
指定FTP根目录(根据需要进行更改):
local_root=/var/ftp
启用被动模式(用于防火墙背后的FTP服务器):
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=your_server_ip(ftp服务器ip)
允许写入(根据需要进行更改):
write_enable=YES
在完成配置后,请保存文件并关闭文本编辑器。
3. 创建FTP用户:
sudo adduser ftpuser
按照提示设置密码和其他信息。
4. 设置FTP用户的家目录
默认情况下,FTP用户的家目录将是其主目录,但可以更改它以使其指向FTP根目录。编辑/etc/passwd
文件:
sudo nano /etc/passwd
找到ftpuser
的行并将其修改为:
ftpuser:x:1001:1001::/var/ftp:/bin/bash
保存并退出文件。
5. 启动vsftpd服务并设置开机自启动:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
6. 防火墙配置:
PORT(主动)模式:
客户端需要关闭防火墙,服务器只需开启20和21端口。
PASV(被动)模式:
服务器需开启大于1024的一定区间的端口,见上面的配置文件设置。
注意:FTP文件传输是明文传输,不安全,可以搭配tls或ssl进行数据加密。对比SCP和RSYNC也可以看出FTP配置起来略显麻烦。。。
SFTP
SFTP(Secure File Transfer Protocol)是一种用于在网络上安全传输文件的协议。它是SSH(Secure Shell)协议的扩展,提供了加密的文件传输和身份验证机制,以确保数据的机密性和完整性。
1. 使用SFTP连接到目标服务器
在终端中,使用以下命令连接到目标服务器:
sftp username@target_ip_address
username 是目标服务器的用户名。
target_ip_address 是目标服务器的IP地址或主机名。
2. 输入密码或提供密钥
如果使用密码进行身份验证,系统将提示输入密码。如果使用SSH密钥对进行身份验证,系统将使用密钥来进行身份验证。
3. 上传文件
put local_file_path remote_destination_path
local_file_path
是要上传的本地文件的路径。remote_destination_path
是要保存文件的远程服务器目标路径。
例如,如果要将本地文件 "example.txt" 上传到 Server B 的 "/home/user1" 目录下,命令将如下所示:
put example.txt /home/user1/
4. 下载文件
get remote_destination_path local_file_path
5. 退出SFTP会话
完成文件传输后,可以使用以下命令退出SFTP会话并断开与远程服务器的连接:
exit
评论区