两台 CentOS 之间传数据:SCP 方式

本文详细介绍了如何在两台CentOS服务器间使用SCP进行文件传输,包括安装SSH服务、配置SSH密钥实现无密码登录,以及使用expect自动化输入密码的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两台 CentOS 之间传数据:SCP 方式

一、CentOS 安装 SSH 服务

0、注意

两台主机上都需要安装!

1、更新系统

首先,确保你的系统是最新的。打开终端并运行以下命令来更新系统:

sudo yum update

2、安装 OpenSSH 服务器

使用 yum 包管理器来安装 OpenSSH 服务器。在终端中运行以下命令:

sudo yum install openssh-server

3、启动 SSH 服务

安装完成后,启动SSH服务并设置它开机自启:

sudo systemctl start sshd
sudo systemctl enable sshd

4、检查SSH服务状态

你可以检查 SSH 服务的状态,确认它是否正在运行:

sudo systemctl status sshd

5、配置防火墙

如果你的服务器正在运行防火墙,你需要允许 SSH 通过。CentOS 7及更高版本使用firewalld作为防火墙。运行以下命令来允许SSH服务:

sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --reload

6、测试 SSH 连接

现在你可以从另一台计算机上测试SSH连接了。使用SSH命令连接到服务器:

ssh [username]@[server_ip]

替换[username]为你的 CentOS 用户名(如root),[server_ip]为你的CentOS服务器的IP地址。

7、更改SSH默认端口(可选)

如果你想更改SSH的默认端口(22),你可以编辑/etc/ssh/sshd_config文件:

sudo vi /etc/ssh/sshd_config

找到Port 22这一行,将其更改为你想要的端口号,然后保存并退出编辑器。之后,重启SSH服务以应用更改:

sudo systemctl restart sshd

现在,你应该能够在CentOS服务器上使用SSH服务了。记得在更改配置后,确保测试新的设置是否正常工作。

二、文件传输

1、命令

在Server A上,打开终端,然后使用以下SCP命令来传输文件:

scp /path/to/source/file.txt username@server_b:/path/to/destination/

这里的/path/to/source/file.txt是你想要传输的文件的完整路径,username是你的Server B上的用户名,server_b是Server B的IP地址或主机名,/path/to/destination/是文件在Server B上的目标路径。

# 格式
scp 本机文件 用户名@ip地址:目标路径

# 举例
scp hello.zip root@1.15.55.255:/data/webroot/

2、输入密码

当你执行上述命令后,系统会提示你输入Server B的用户密码。输入正确的密码后,文件传输就会开始。

使用 expect 自动输入密码的方法

expect 是一个用于自动化交互式应用程序的工具,它能够根据程序的输出自动地发送输入。在 Linux 和 Unix 系统中,expect 通常用于自动化那些需要用户输入的命令,比如 scp、ssh、telnet 等。

expect 的工作原理是通过编写脚本来模拟人类与程序的交互。脚本中定义了预期的输出(即程序的响应)和相应的输入(即程序的输入)。当程序运行并产生输出时,expect 会检查输出是否与脚本中定义的预期输出匹配,如果匹配,它就会发送相应的输入。

例如,当你使用 scp 命令从一个机器复制文件到另一个机器时,通常需要手动输入目标机器的密码。使用 expect,你可以编写一个脚本,让 expect 等待 scp 命令的输出,并在检测到需要输入密码的提示时自动发送密码,从而实现自动化的文件复制过程。

安装 expect

yum install expect

下面是一个简单的 expect 脚本示例,用于自动执行 scp 命令:

#!/usr/bin/expect
set timeout 30
# 注意修改成对应的用户名@主机地址
spawn scp /home/hello.txt 用户名@主机地址:/home/hello.txt
# 这个提示要写对,就是默认情况下让输入密码的提示
expect "用户名@主机地址's password:"
# 替换成自己的密码
send "你的密码\r"
interact

3、等待传输完成即可

文件传输完成后,你会在终端看到相应的提示信息。此时,你可以登录到Server B上,检查文件是否已经成功传输到指定的路径下。

三、配置SSH无密码登录(未亲测)

1、配置 SSH 密钥

第一步:在Server A上,生成 SSH 密钥对(如果还没有的话):

ssh-keygen

第二步:复制生成的公钥(默认为~/.ssh/id_rsa.pub)到Server B的~/.ssh/authorized_keys文件中。你可以使用ssh-copy-id命令来简化这个过程:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_b

​ 这里的user是你的用户名,server_b是Server B的IP地址或主机名。

第三步:输入Server B的密码后,你的公钥就会被添加到Server B的~/.ssh/authorized_keys文件中。

2、测试无密码登录

在Server A上,尝试无密码登录到Server B:

ssh user@server_b

如果配置正确,你应该能够直接登录而不需要输入密码。

3、检查SSH配置

确保Server B上的/etc/ssh/sshd_config文件中的以下设置是正确的:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

确保没有配置行被注释掉,并且这些设置没有被更改。

4、重启 SSH 服务

如果你做了任何更改,比如修改了sshd_config文件,你需要重启SSH服务来使更改生效:

sudo systemctl restart ssh

或者

sudo service ssh restart

完成这些步骤后,你应该能够在 Server A 上无密码登录到 Server B。记得在操作过程中,保持对服务器权限和网络安全的注意。

<think>好的,用户问的是如何在两台Linux服务器之间进行数据输测试。我需要先理解用户的具体需求,他们可能是在部署应用或者优化网络时需要测试输速度和稳定性。根据提供的引用内容,有几种方法可以实现,比如使用scp、iperf、rsync或者paramiko库。 首先,我应该分步骤介绍每种方法,并说明它们的适用场景。比如scp适合简单的文件输测试,而iperf更专注于网络带宽的测量,rsync则适合大文件或目录的增量输。paramiko属于编程实现,适合自动化需求。 然后,需要确保每个步骤的LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但这里可能数学公式不多,主要关注代码块和引用。引用要放在相关段落的末尾,自然添加。 用户可能还关心如何选择工具,比如测试带宽和实际输文件的区别。比如iperf测试的是最大带宽,而scp/rsync反映的是实际文件输速度,受磁盘IO等因素影响。这一点需要明确说明,帮助用户理解不同工具的用途。 另外,生成的相关问题要围绕数据输测试,比如性能分析、优化方法、应用场景等。确保问题有针对性,能够引导用户进一步学习。 最后,检查回答结构是否清晰,是否符合用户可见层的要求,即逐步解决问题,保证真实可靠。引用标注是否正确,代码示例是否准确,比如iperf的使用需要在一台服务器启动服务端,另一台作为客户端连接,并给出命令示例。scp和rsync的命令格式也要正确,避免用户混淆。 总结下来,回答应该包括四个主要方法:iperf测试带宽、scp输测试、rsync增量测试、paramiko编程实现。每个方法给出步骤、示例代码和适用场景,最后比较不同工具的差异,并生成相关问题。这样用户可以根据实际需求选择合适的测试方式。</think>### 两台 Linux 服务器间数据输测试方法 #### 一、使用 iperf 测试网络带宽(纯带宽测试) **适用场景**: 测量两台服务器之间的最大网络带宽,不涉及实际文件输[^2]。 1. **安装工具**: ```bash # 在服务端和客户端均执行 yum install iperf3 -y # CentOS apt install iperf3 -y # Ubuntu ``` 2. **启动服务端**: ```bash iperf3 -s -p 5201 # 默认使用TCP协议 ``` 3. **客户端发起测试**: ```bash iperf3 -c [服务器IP] -p 5201 -t 30 # 测试持续30秒 ``` 输出结果包含带宽值(如`30 Gbits/sec`),反映网络链路质量。 #### 二、使用 scp 进行实际文件输测试 **适用场景**: 测试真实文件输速度(受磁盘IO/加密开销影响)[^3]。 ```bash # 生成测试文件(1GB大小) dd if=/dev/urandom of=testfile bs=1M count=1024 # 输测试 time scp testfile user@目标服务器IP:/path/ ``` 输出结果中的`real`时间可用于计算实际输速率: $$ 输速率 = \frac{文件大小}{输时间} $$ #### 三、使用 rsync 测试增量输性能 **适用场景**: 大文件/目录的差异同步测试。 ```bash rsync -avz --progress /本地路径/ user@目标服务器IP:/远程路径/ ``` 添加`--bwlimit=10000`参数可测试限速输(单位KB/s)。 #### 四、Python paramiko 实现(编程测试) **适用场景**: 需要自动化测试或集成到脚本中[^4]。 ```python import paramiko transport = paramiko.Transport(('目标IP', 22)) transport.connect(username='user', password='pwd') sftp = paramiko.SFTPClient.from_transport(transport) # 测试上速度 sftp.put('localfile', 'remotefile') # 测试下载速度 sftp.get('remotefile', 'localfile') ``` #### 五、关键差异说明 | 工具 | 测试目标 | 数据特征 | 典型输出指标 | |---------|---------------|------------------|------------------| | iperf3 | 网络带宽上限 | 内存虚拟数据 | 带宽(Gbps/Mbps) | | scp | 实际文件输 | 磁盘真实文件 | 输时间/速率 | | rsync | 增量输效率 | 差异数据块 | 同步耗时 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值