侧边栏壁纸
博主头像
伯淳的个人博客博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

服务器之间的文件传输方式

Administrator
2023-11-19 / 0 评论 / 1 点赞 / 40 阅读 / 10505 字

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: 排除不需要同步的文件或目录。

示例

  1. 本地复制:从一个目录复制到另一个目录

    rsync -av /path/to/local/dir user@remotehost:/path/to/remote/dir

  2. 远程同步:将本地目录同步到远程服务器

    rsync -avz /path/to/local/dir user@remotehost:/path/to/remote/dir

  3. 从远程服务器拉取文件

    rsync -avz user@remotehost:/path/to/remote/dir /path/to/local/dir

  4. 排除文件:同步时排除特定文件或目录

    rsync -av --exclude 'file1.txt' --exclude 'dir1/' /path/to/local/dir user@remotehost:/path/to/remote/dir

  5. 删除目标中多余的文件

    rsync -av --delete /path/to/local/dir user@remotehost:/path/to/remote/dir

  6. 使用 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

1

评论区