linux下用scp命令在两个服务器之间传输文件,利用php_scp函数进行文件传输

本文详细介绍了在Linux环境下如何使用SCP命令进行文件和目录的传输,包括从服务器下载文件和上传本地文件到服务器的操作方法。同时,文章还介绍了如何在PHP程序中利用php_scp_send和php_scp_revc函数结合php_ssh2组件实现文件的远程传输。

在linux下利用scp进行文件传输,

从服务器下载文件

scp username@servername:/path/filename  /path/filename

 

上传本地文件到服务器

scp /path/filename username@servername:/path/filename

从服务器下载整个目录

scp -r username@servername:remote_dir/  /path/

上传目录到服务器      

scp  -r /dir username@servername:remote_dir

以上操作在执行时都会提示你输入密码,输入密码后就会成功执行。

但是这些只适合在操作linux服务器时使用,如何在程序中执行呢?

在PHP就用到了php_scp_send和php_scp_revc函数

php_scp_send是向另一个服务器传输文件,php_scp_revc则是下载文件。

这两个函数要结合php_ssh2组件使用。

$ssh2 = ssh2_connect($ssh_host, $ssh_port);  //先登陆SSH并连接,具体参照php_ssh2连接


//$local_file为本地文件, $remote_file为远程文件
//本地传输文件到远程服务器
$stream=ssh2_scp_send($ssh2, $local_file, $remote_file, 0644);
默认权限为0644,返回值为bool值,true或false.

//从远程服务器下载文件
$stream=ssh2_scp_revc($ssh2, $remote_file, $local_file);
//返回值为返回值为bool值,true或false.

 

转载于:https://www.cnblogs.com/suiyuewuxin/p/6858215.html

<think>我们正在讨论的是在不同服务器之间使用scp命令传输文件。根据引用内容,scp命令的基本用法包括从本地到远程、从远程到本地,以及递归复制目录等。同时,引用还提到了使用特定端口、使用私钥认证的方法,以及如何将scp放到后台运行。 用户明确要求了解在不同服务器间传输文件的使用方法,因此我们需要详细说明scp命令的语法、常用选项和示例。 根据引用[1]、[2]、[3]、[4]、[5],我们可以总结如下: 1. 基本语法: ``` scp [选项] [源文件] [目标地址] ``` 2. 常用选项: - `-r`:递归复制整个目录 - `-P`:指定远程主机的端口号(注意是大写P,因为小写p已被其他用途占用,但在引用[3]中使用了小写p,实际上scp命令的端口选项是大写P,而ssh命令的端口选项是小写p。根据引用[1]和[4]都是使用的大写P,所以这里应该用大写P) - `-i`:指定用于身份验证的私钥文件 3. 传输方向: - 从本地复制到远程:`scp /local/path user@remote:/remote/path` - 从远程复制到本地:`scp user@remote:/remote/path /local/path` 4. 后台运行:通过先暂停任务(Ctrl+Z),然后放入后台(bg),最后断开与shell的关联(disown)来实现。 5. 使用密钥认证:需要将本地公钥添加到远程服务器的`authorized_keys`文件中(引用[5])。 现在,我们来组织回答: # Linux中使用scp命令在不同服务器间传输文件的方法 `scp`(Secure Copy)命令是基于SSH协议的安全文件传输工具,用于在Linux服务器之间安全地复制文件和目录。以下是详细使用方法: ## 1. 基本语法 ```bash scp [选项] 源文件或目录 目标文件或目录 ``` ## 2. 常用选项 | 选项 | 功能描述 | |------|----------| | `-r` | 递归复制整个目录 | | `-P <端口号>` | 指定远程服务器的SSH端口(默认22,非默认时必须指定) | | `-i <私钥文件>` | 使用指定的私钥文件进行身份验证 | ## 3. 使用场景与示例 ### 3.1 从本地复制文件到远程服务器 ```bash scp /path/to/local/file username@remote_host:/path/to/remote/directory ``` - **示例**:将本地文件`report.txt`复制到远程服务器(IP:192.168.1.100)的`/home/user/docs/`目录,使用用户`alice`: ```bash scp report.txt alice@192.168.1.100:/home/user/docs/ ``` ### 3.2 从远程服务器复制文件到本地 ```bash scp username@remote_host:/path/to/remote/file /path/to/local/directory ``` - **示例**:将远程服务器(IP:10.0.0.5)上的`/var/log/app.log`复制到本地的`/tmp/`目录: ```bash scp bob@10.0.0.5:/var/log/app.log /tmp/ ``` ### 3.3 递归复制整个目录 使用`-r`选项复制目录及其所有内容: ```bash scp -r /path/to/local/dir username@remote_host:/path/to/remote/dir ``` - **示例**:将本地的`/data/backup/`目录复制到远程服务器的`/backups/`目录: ```bash scp -r /data/backup/ carol@203.0.113.25:/backups/ ``` ### 3.4 指定非默认SSH端口 如果远程服务器SSH服务监听非默认端口(如2222): ```bash scp -P 2222 local_file.txt username@remote_host:/remote/dir/ ``` > **注意**:`-P`选项必须紧跟在`scp`命令后,且为大写字母P[^1][^4]。 ### 3.5 使用私钥文件认证 若需通过密钥而非密码验证身份: ```bash scp -i ~/.ssh/id_rsa_private local_file.txt username@remote_host:/remote/dir/ ``` > **前提**:远程服务器的`~/.ssh/authorized_keys`文件中已添加本地公钥(如`id_rsa_public.pub`)[^5]。 ## 4. 后台传输文件 对于耗时较长的大文件传输,可放入后台运行以避免终端中断: 1. 启动传输并输入密码: ```bash scp -r large_dir/ user@remote:/backup/ ``` 2. 按`Ctrl+Z`暂停任务; 3. 使用`bg`命令将任务转入后台运行; 4. 使用`disown`命令断开任务与当前shell的关联: ```bash disown %1 # 假设任务编号为1 ``` > **提示**:任务转入后台后,即使关闭终端也不会中断传输[^3]。 ## 5. 常见问题与技巧 - **权限问题**:若目标目录无写入权限,需提前在远程服务器用`chmod`设置权限。 - **覆盖风险**:`scp`默认覆盖同名文件,建议先备份重要数据。 - **加速传输**:可结合`tar`压缩后传输,例如: ```bash tar czf - large_dir/ | ssh user@remote "tar xzf - -C /backup/" ``` §§相关问题§§ 1. 如何设置SSH免密登录以实现`scp`无密码传输文件?[^5] 2. `rsync`与`scp`在文件传输中有哪些区别?[^3] 3. Linux服务器之间如何挂载远程目录实现实时文件同步? </think>### Linux 使用 `scp` 命令在不同服务器间传输文件的方法 `scp`(Secure Copy)是基于 SSH 协议的安全文件传输命令,适用于 Linux 服务器之间文件传输。以下是详细使用指南: --- #### 一、基础语法 ```bash scp [选项] 源文件路径 目标服务器用户名@目标服务器IP:目标路径 ``` - **常用选项**: - `-r`:递归复制整个目录 - `-P <端口号>`:指定 SSH 端口(默认 22) - `-i <私钥路径>`:使用密钥认证(替代密码) - `-v`:显示详细传输过程(调试用) --- #### 二、核心使用场景与示例 1. **本地文件 → 远程服务器** ```bash scp /本地/文件.txt 用户名@远程IP:/远程/目录/ ``` **示例**: ```bash scp report.pdf admin@192.168.1.100:/home/admin/docs/ ``` 2. **远程服务器 → 本地** ```bash scp 用户名@远程IP:/远程/文件路径 /本地/目录/ ``` **示例**: ```bash scp user@10.0.0.5:/var/log/error.log /tmp/ ``` 3. **远程服务器A → 远程服务器B** 在**服务器A**上执行: ```bash scp /路径/文件 用户名B@服务器B_IP:/目标路径/ ``` **示例**: ```bash scp -P 2222 data.tar.gz bob@203.0.113.25:/backups/ ``` 4. **递归传输目录**(需 `-r` 选项) ```bash scp -r /本地/目录/ 用户名@远程IP:/远程/目录/ ``` **示例**: ```bash scp -r ~/project/ alice@192.168.1.200:/opt/apps/ ``` --- #### 三、高级技巧 1. **指定非默认 SSH 端口** ```bash scp -P 2222 file.txt user@host:/path/ # 注意:-P 必须大写 ``` 2. **使用密钥认证** ```bash scp -i ~/.ssh/id_rsa_private file.txt user@host:/path/ ``` > **前提**:目标服务器 `~/.ssh/authorized_keys` 中已添加公钥[^5]。 3. **后台传输文件** ```bash scp large_file.zip user@host:/path/ # 启动传输 # 按 Ctrl+Z 暂停 → 输入 bg → 输入 disown ``` 此时传输会在后台持续运行,即使关闭终端也不中断[^3]。 4. **限速传输**(避免带宽占用) ```bash scp -l 1000 file.txt user@host:/path/ # 限速 1000 Kbit/s ``` --- #### 四、注意事项 1. **路径格式**: - 绝对路径更可靠(如 `/home/user/file`) - 使用 `./` 表示当前目录,`../` 表示上级目录 2. **权限问题**: - 若目标目录无写入权限,需添加 `sudo`(但 `scp` 本身不支持 `sudo`,需提前配置权限) 3. **覆盖风险**: - `scp` 会自动覆盖同名文件,建议先备份目标位置文件 4. **防火墙配置**: - 确保目标服务器的 SSH 端口(默认 22)在防火墙中允许访问 --- #### 五、替代方案推荐 - **`rsync`**:支持增量传输和断点续传,更适合大文件或定期同步[^3] - **`sftp`**:交互式文件传输,适合多次操作 - **`curl`/`wget`**:通过 HTTP/FTP 协议下载公开文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值