Linux远程拷贝之ftp与scp命令

本文介绍如何在Linux环境中使用FTP与SCP命令进行文件传输。包括FTP的连接、文件下载与上传操作,以及SCP命令的基本用法。还提供了一个Windows客户端工具WinSCP,用于实现Windows与Linux之间的文件互拷。

今天在做两台linux机器文件拷贝时,试用了一下ftp命令与scp命令,这里作个记录。

ftp命令:

   其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的拷贝。

1. 连接ftp服务器 
  格式:ftp [hostname| ip-address]
  a)在linux命令行下输入:ftp 192.168.26.66
  b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可。

 2. 下载文件

  下载文件通常用get和mget这两条命令。
  a) get 
  格式:get [remote-file] [local-file]
  将文件从远端主机中传送至本地主机中.
  如要获取服务器上e:/rose/1.bmp,则
  ftp> get /rose/1.bmp 1.bmp (回车)

  b) mget      
  格式:mget [remote-files]
  从远端主机接收一批文件至本地主机.
  如要获取服务器上e:/rose/下的所有文件,则
  ftp> cd /rose
  ftp> mget *.* (回车)

  注意:文件都下载到了linux主机的当前目录下。比如,在 /root/yint下运行的ftp命令,则文件都下载到了/root/yint下。

 3.上传文件

  a) put
  格式:put local-file [remote-file]
  将本地一个文件传送至远端主机中.
  如要把本地的1.bmp传送到远端主机e:/rose,并改名为333.bmp
  ftp> put 1.bmp /rose/333.bmp (回车)

  b) mput
  格式:mput local-files
  将本地主机中一批文件传送至远端主机.
  如要把本地当前目录下所有bmp文件上传到服务器e:/rose 下
  ftp> cd /rose (回车)
  ftp> mput *.bmp (回车)
  注意:上传文件都来自于主机的当前目录下。比如,在 /root/test下运行的ftp命令,则只有在/root/test下的文件linux才会上传到服务器e:/rose 下。

 4. 断开连接
  bye:中断与服务器的连接。
  ftp> bye (回车)

SCP命令:

    scp是安全的文件拷贝,基于ssh的登录

   假定你想把本地计算机/home下的一个名为a.tar.tz的文件拷贝到远程服务器192.168.0.2上的/home/tmp。而且你在远程服务器上的帐号名为root。可以用这个命令: 
scp /home/a.tar.tz root@192.168.0.2:/home/tmp/

如果把文件从远程机器拷贝到本机当前目录用这个命令: 
   scp root@192.168.0.2:/home/a.tar.tz 

   拷贝远程机器的整个目录下的文件
   scp -r root@192.168.0.2:/home/* ./

PS:有个Winscp的windows客户端软件,通过它可以实现windows和linux的文件互拷贝,相当方便

<think>我们正在讨论如何使用SCP命令从Mac拷贝文件到Linux服务器。根据引用[2]中的示例,我们可以构建一个基本的SCP命令格式。同时,引用[3]提到了一种自动输入密码的方法(使用expect脚本),但用户当前只是询问基本方法,因此我们先介绍基本的手动输入密码的方式,然后如果需要的话可以补充自动输入密码的方法。 基本SCP命令格式: scp [本地文件路径] [用户名]@[远程服务器IP]:[远程目标路径] 例如,将Mac上Downloads目录下的一个文件复制到远程Linux服务器的/smart目录下,命令如下(如引用[2]所示): scp ~/Downloads/smart-logistics-0.0.1-SNAPSHOT.jar root@47.114.122.85:/smart 执行命令后,系统会提示输入远程服务器上对应用户的密码(这里是root用户的密码)。 但是,在实际操作中,我们需要注意以下几点: 1. 权限问题:确保远程服务器上的目标目录有写入权限。 2. 网络连接:确保Mac能够访问远程服务器的IP地址和端口(SCP默认使用22端口)。 3. 用户认证:需要知道远程服务器的用户名和密码(或使用SSH密钥认证,避免每次输入密码)。 如果用户需要避免每次输入密码,可以使用SSH密钥对进行认证。步骤如下: 1. 在Mac上生成SSH密钥对(如果还没有): ```bash ssh-keygen -t rsa ``` 默认会在~/.ssh目录下生成id_rsa(私钥)和id_rsa.pub(公钥)。 2. 将公钥复制到远程Linux服务器: ```bash ssh-copy-id root@47.114.122.85 ``` 然后输入密码,之后就可以免密登录和免密SCP传输了。 3. 之后使用SCP命令就不再需要输入密码。 如果用户希望在不交互的情况下自动输入密码(但存在安全风险,因为密码会明文暴露),可以考虑使用expect脚本(如引用[3]所提及)或者使用sshpass工具(但Mac默认没有安装,需通过Homebrew安装)。但通常推荐使用SSH密钥认证。 因此,回答将分为两部分: 1. 基本方法(手动输入密码) 2. 进阶方法(配置SSH密钥免密码传输) 另外,引用[4]提到可以使用FTP客户端,但用户明确询问SCP命令,因此我们只介绍SCP方法。 下面构建回答: </think>根据您的需求,我将详细介绍使用`scp`命令从Mac拷贝文件到Linux服务器的完整流程,包含四种常用方法及常见问题解决方案。 --- ### 一、基础SCP传输方法 #### 1. **基本命令结构** ```bash scp [本地文件路径] [用户名]@[远程IP]:[远程路径] ``` - **示例**(拷贝Mac的下载文件夹中的文件到Linux的`/home/user`目录): ```bash scp ~/Downloads/example.txt user@192.168.1.100:/home/user/ ``` 执行后会提示输入Linux服务器的密码,输入正确后开始传输[^2]。 #### 2. **指定端口(非默认22端口时)** ```bash scp -P 2222 ~/Documents/report.pdf admin@10.0.0.5:/var/files/ ``` ⚠️ 注意:端口参数 `-P` 为大写字母(SSH命令的 `-p` 区分)[^1]。 --- ### 二、高效传输技巧 #### 1. **递归传输文件夹** ```bash scp -r ~/project_folder user@linux_ip:/backup/ ``` 添加 `-r` 参数可递归复制整个目录结构(包含子目录和文件)[^1]。 #### 2. **压缩传输加速(大文件推荐)** ```bash scp -C ~/large_video.mp4 user@linux_ip:/media/ ``` `-C` 参数启用gzip压缩,减少传输时间(适用于网络带宽有限场景)[^1]。 --- ### 三、自动输入密码的方法 #### 1. **使用SSH密钥认证(推荐安全方案)** ```bash # 在Mac生成密钥对 ssh-keygen -t ed25519 # 将公钥复制到Linux服务器 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@linux_ip ``` 配置后执行SCP无需手动输入密码,通过密钥自动认证[^3]。 #### 2. **Expect脚本自动填充密码(临时方案)** 创建脚本 `auto_scp.exp`: ```expect #!/usr/bin/expect set file [lindex $argv 0] set server [lindex $argv 1] set passwd "your_password" spawn scp $file $server expect "password:" send "$passwd\r" interact ``` 运行: ```bash expect auto_scp.exp ~/file.txt user@linux_ip:/target/ ``` ⚠️ 警告:密码明文存储有泄露风险,仅限测试环境使用[^3]。 --- ### 四、调试常见问题解决 | 问题现象 | 解决方案 | |-------------------------|----------------------------------| | **Connection refused** | 检查Linux是否开启SSH服务:`sudo systemctl status sshd` | | **Permission denied** | 确保远程目录有写入权限:`chmod +w /target_path` | | **Host key verification failed** | 删除Mac的旧密钥:`ssh-keygen -R linux_ip` | | **传输中断** | 使用 `-o ServerAliveInterval=60` 保持连接 | --- ### 五、替代方案参考 1. **rsync**:增量同步工具,更适合频繁更新的大文件 ```bash rsync -avz ~/source_folder/ user@linux_ip:/backup/ ``` 2. **SFTP客户端**:可视化操作(如FileZilla、Transmit)[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值