当前位置: 首页 > news >正文

SCP拷贝文件命令以及其它上传下载文件方式总结

目录

1.ssh服务

1.1.简介

1.2.Linux安装配置 SSH 服务(服务端)

1.3.Windows 使用 SSH

1.4.基础用法

1.5.密钥认证配置(免密码登录)

2.scp

2.1.简介

2.2.常见示例场景

2.3.Linux和Windows文件互传

2.4.传输大文件优化

2.5.常见问题以及解决方法

3.xshell和xftp

4.OpenSSH

5.SecureCRT

6.总结


1.ssh服务

1.1.简介

   ssh(Secure Shell)是一种网络协议,用于在不安全网络中提供安全的远程登录和文件传输功能。通过加密通道远程控制服务器或执行命令,替代不安全的telnet默认端口:22(可通过-p参数修改)。主要用途有:

用途描述
 远程终端登录登录远程 Linux 主机并控制它
安全文件传输使用 scp 或 sftp 实现加密文件传输
命令远程执行在远程机器上执行脚本、命令
隧道和端口转发安全传输 HTTP、VNC 等不安全流量
Git 拉取/推送Git 服务常用 SSH 认证进行安全通信

SSH 服务组件有:

组件说明
sshdSSH 服务器守护进程,监听 22 端口
sshSSH 客户端命令行程序
scp使用 SSH 协议传输文件
sftp类 FTP 的 SSH 安全文件传输工具
~/.ssh/authorized_keys服务器端保存客户端公钥的文件

1.2.Linux安装配置 SSH 服务(服务端)

安装ssh服务器端

Ubuntu默认没有安装ssh的server,需要安装;麒麟的系统都默认安装了。

sudo apt-get install openssh-server

配置文件路径:/etc/ssh/sshd_config

常见配置项说明:

配置项描述
Port 22设置监听端口(可自定义为非默认端口)
PermitRootLogin no禁止 root 用户远程登录
PasswordAuthentication yes/no是否允许密码登录
PubkeyAuthentication yes是否允许公钥登录
AllowUsers user1 user2只允许指定用户登录

重启服务使配置生效:

sudo systemctl restart sshd

1.3.Windows 使用 SSH

方法 1:安装 OpenSSH 客户端(Windows 10/11 内置):

# 启用OpenSSH客户端(设置→应用→可选功能→添加OpenSSH客户端)
ssh user@host  # 直接在PowerShell或CMD中使用

方法 2:使用 PuTTY(图形化 SSH 客户端):

  1. 下载 PuTTY,输入服务器 IP 和端口。
  2. 选择 SSH 协议,点击「Open」连接。

1.4.基础用法

 1.远程登录

# 格式:ssh [用户名]@[服务器IP或域名]
ssh user@192.168.1.100  # 连接服务器,需输入密码
ssh user@example.com     # 通过域名连接

2.指定端口与密钥

ssh -p 2222 user@192.168.1.100  # 指定非标准端口2222
ssh -i ~/.ssh/id_rsa user@host  # 使用私钥认证(免密码)

3.执行单次命令

ssh user@host "ls -l"  # 远程执行ls -l命令并返回结果

1.5.密钥认证配置(免密码登录)

1.生成密钥对

ssh-keygen -t rsa -b 4096  # 生成RSA密钥对(默认存储在~/.ssh/id_rsa)

2.将公钥复制到服务器

ssh-copy-id user@host  # 自动复制公钥到服务器的~/.ssh/authorized_keys
# 手动复制(适合无ssh-copy-id的系统)
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

2.scp

2.1.简介

   scp(Secure Copy)是 Linux/Unix 系统中用于通过 SSH 加密传输文件和目录的命令,常用于服务器间文件拷贝或本地与服务器互传。

        基本语法:

scp [选项] [源文件/目录] [目标用户@目标主机:目标路径]
  • 源与目标
    • 本地→远程:scp local_file user@host:/remote/path
    • 远程→本地:scp user@host:/remote/file local_path
    • 远程→远程:scp user1@host1:/file user2@host2:/path

常用选项

  • -r:递归拷贝目录(如scp -r dir/ user@host:/remote/)。
  • -P port:指定 SSH 端口(默认 22,如scp -P 2222 file user@host:)。
  • -C:压缩传输数据,节省带宽(如scp -C bigfile user@host:)。
  • -p:保留文件时间戳、权限等属性。
  • -i key_file:使用指定私钥认证(替代密码,如scp -i id_rsa file user@host:)。

2.2.常见示例场景

1.本地文件上传到远程服务器

# 上传本地文件到远程用户家目录
scp /local/path/file.txt user@192.168.1.100:~  
# 上传目录(需加-r)
scp -r /local/dir user@192.168.1.100:/remote/dir  

2.从远程服务器下载文件到本地

# 下载远程文件到本地当前目录
scp user@192.168.1.100:/remote/file.txt .  
# 下载远程目录(需加-r)
scp -r user@192.168.1.100:/remote/dir /local/path  

3. 远程服务器间拷贝(需本地中转)

# 从A服务器拷贝到B服务器(通过本地临时中转)
scp userA@hostA:/file.txt userB@hostB:/path/  
# 或直接指定跳板机(需SSH配置支持)
scp -o ProxyCommand="ssh -W hostB:22 gateway" userA@hostA:/file userB@hostB:  

2.3.Linux和Windows文件互传

在 Linux 和 Windows 系统间用scp拷贝文件,需先确认环境支持(Linux 自带 scp,Windows 可通过 Git Bash 或 WSL 使用)。

1.从 Linux 拷贝文件到 Windows

假设 Linux 主机文件路径为/path/to/file,Windows 主机 IP 为192.168.1.100,目标用户为user

# 拷贝单个文件到Windows指定目录(需提前在Windows创建目标路径)
scp /path/to/file user@192.168.1.100:/c/Users/user/Documents/  # 拷贝文件夹(需加 -r 参数)
scp -r /path/to/folder user@192.168.1.100:/c/Users/user/Documents/  

Windows 端接收路径说明

  • /c/Users/user/Documents/ 对应 Windows 的C:\Users\user\Documents路径。

2.从 Windows 拷贝文件到 Linux

在 Git Bash 或 WSL 中执行,假设 Windows 文件路径为/c/Users/user/Documents/file,Linux 主机 IP 为192.168.1.101,目标用户为user

# 从Windows拷贝文件到Linux
scp /c/Users/user/Documents/file user@192.168.1.101:/home/user/  # 拷贝文件夹(加 -r 参数)
scp -r /c/Users/user/Documents/folder user@192.168.1.101:/home/user/  

3.跨系统权限问题的通用技巧

使用密钥认证替代密码(推荐):避免密码输入问题,提升安全性和自动化能力。

操作步骤(以 Linux→Windows 为例):

1)在 Linux 生成密钥对:

ssh-keygen -t rsa  

2)将公钥(~/.ssh/id_rsa.pub)复制到 Windows 的 OpenSSH 认证文件(需先在 Windows 启用 OpenSSH 服务)。

3)传输时无需输入密码:

scp -i ~/.ssh/id_rsa /path/file user@192.168.1.100:/target/  

2.4.传输大文件优化

1.压缩传输(减少带宽占用)

加 -C 参数启用压缩,适合网络带宽有限的场景:

scp -C /data/bigfile.iso user@192.168.1.100:/tmp/

原理:压缩数据后传输,可能增加 CPU 消耗,但能降低实际传输的数据量。

2.限速传输(避免带宽被占满)

用 -l 参数指定带宽(单位:KB/s),例如限制到 10MB/s(10240KB/s):

scp -l 10240 /data/bigfile.iso user@192.168.1.100:/tmp/

3. 断点续传(推荐用 rsync 替代 scp)

scp本身不支持断点续传,若文件中途传输失败需重传,建议改用rsync(需远程主机支持):

# 本地→远程(-a保持属性,-h人类可读,-P断点续传)
rsync -ahP /data/bigfile.iso user@192.168.1.100:/tmp/

优势:中断后可继续传输,且速度通常比scp更快(仅传输差异部分)。

4.后台传输(防止会话断开)

用 screen 或 tmux 工具创建后台会话,避免因 SSH 断开导致传输中断:

1)安装screen(若未安装):

sudo apt install screen  # Debian/Ubuntu
sudo yum install screen  # CentOS/RHEL

2)创建会话并执行 scp:

screen -S scp_transfer
scp /data/bigfile.iso user@192.168.1.100:/tmp/

3)按 Ctrl+A+D 分离会话,传输会在后台继续;重新连接用 screen -r scp_transfer

5.分块传输(超大文件场景)

若文件超过单个数据包限制(极少情况),可先用split分割文件,传输后再合并:

1)本地分割文件(每块 1GB):

split -b 1G /data/超大文件.iso /data/文件块-

2) 传输所有块:

scp /data/文件块-* user@192.168.1.100:/tmp/

3) 远程合并文件:

cat /tmp/文件块-* > /tmp/超大文件.iso

6.优化 SSH 配置(提升稳定性)

修改本地~/.ssh/config(若无则创建),添加以下配置减少断开:

Host *# 每60秒发送一次保持连接的数据包ServerAliveInterval 60# 超过3次未响应则断开(防止假死)ServerAliveCountMax 3

2.5.常见问题以及解决方法

1)认证失败(密码 / 密钥问题)

  • 提示password:后输入正确密码仍报错Permission denied
  • 密钥认证时提示Agent admitted failure to sign using the key

解决方法

  • 密码认证:确认用户名、密码正确,且目标用户有 SSH 登录权限(可先尝试ssh user@host能否登录)。
  • 密钥认证
    • 确保私钥文件权限正确(本地私钥需为600权限,如chmod 600 id_rsa)。
    • ssh-add将私钥添加到密钥代理(ssh-add ~/.ssh/id_rsa)。
    • 检查目标主机~/.ssh/authorized_keys是否包含公钥,且文件权限为600、目录~/.ssh权限为700

2)连接拒绝(Connection refused)

提示ssh: connect to host ... port 22: Connection refused

解决方法

  • 确认目标主机 IP 正确,且网络可达(用ping host测试)。
  • 检查目标主机 SSH 服务是否启动(systemctl status sshd,若未启动则systemctl start sshd)。
  • 若目标主机端口非默认 22,需用-P port指定(如scp -P 8022 file user@host:)。

3)权限不足(Permission denied)

  • 传输时提示scp: ...: Permission denied
  • 无法写入目标路径(如远程目录无写入权限)

解决方法

  • 确认目标路径的权限:若为远程目录,可尝试用sudo提升权限(如scp file root@host:/path)。
  • 若目标路径为用户家目录,确保用户对该目录有写权限(远程登录后用ls -la查看权限)。

4)路径错误(No such file or directory)

提示scp: /path/to/file: No such file or directory

解决方法

  • 检查源路径或目标路径是否正确(本地路径用绝对路径更稳妥,如/home/user/file)。
  • 远程路径以:开头,注意路径格式:
    • 正确:scp file user@host:/tmp/(绝对路径)
    • 错误:scp file user@host:tmp/(缺少/,会被识别为用户家目录下的tmp

5)传输中断 / 速度慢

  • 大文件传输时断开,或速度远低于预期。
  • 提示packet_write_wait: Connection to ... broken by remote host

解决方法

  • 大文件传输
    • -C压缩传输(scp -C bigfile user@host:),或改用rsync(支持断点续传)。
    • 若网络不稳定,可分块传输或使用screen/tmux保持会话后台运行。
  • 限速 / 带宽问题
    • -l指定带宽(如scp -l 1024 file user@host:限制 1MB/s)。
    • 检查网络链路是否拥堵(如服务器带宽不足、防火墙限速)。

6)目录传输失败

拷贝目录时提示scp: ...: is a directory

解决方法

  • 目录传输必须加-r选项(递归拷贝),如:
scp -r local_dir user@host:/remote_dir  # 正确
scp local_dir user@host:/remote_dir     # 错误(缺少-r)

7)特殊字符 / 空格路径问题

路径含空格或特殊字符时提示错误。

解决方法

  • 用引号包裹路径,如:
scp "/local/path with space/file.txt" user@host:"/remote/path with space/"

8)本地与远程系统差异

  • 远程为 Windows 系统(通过 WSL/SSH 服务)时,路径格式不兼容。
  • 文件名大小写敏感问题(Linux 区分大小写,Windows 不区分)。

解决方法

  • Windows 远程路径用双反斜杠或正斜杠,如:
scp file user@host:/c/Users/user/Documents/  # 正确
scp file user@host:C:\\Users\\user\\Documents  # 正确
  • 传输时注意文件名大小写,避免因误写导致找不到文件。

9)防火墙 / SELinux 限制

  • 公司内网或云服务器因防火墙规则无法连接。
  • SELinux 阻止文件传输(提示Permission denied但权限正确)。

解决方法

  • 联系管理员开放 SSH 端口(默认 22),或确认云服务器安全组规则允许访问。
  • 临时关闭 SELinux(setenforce 0)测试,若正常则需配置 SELinux 策略(如chcon -t ssh_home_t /path)。

3.xshell和xftp

        Xshell 和 Xftp 是两款由 NetSarang 公司开发的、运行在 Windows 平台上的软件,通常一起配合使用来进行远程服务器的管理和文件传输:

Xshell

  • 功能定位:是一个强大的安全终端模拟软件,支持 SSH、SFTP、TELNET、RLOGIN 等协议,主要用于在 Windows 系统下安全地访问 Unix/Linux 主机,让用户能通过 Windows 界面远程控制远端不同系统的服务器,执行命令、编辑文件和进行系统管理等任务。
  • 主要特点
    • 安全性高:支持 SSH1、SSH2 协议,以及密码、DSA 和 RSA 公开密钥等用户认证方法,采用多种加密算法对所有流量进行加密,防止数据在传输过程中被窃取或篡改。
    • 用户体验好:具有标签环境、广泛拆分窗口、同步输入和会话管理等功能,方便用户同时管理多个远程连接,节省时间并提高工作效率。还支持布局切换,键盘映射兼容性好,不需要用户手动修改映射。
    • 功能丰富:有丰富的外观配色方案和样式选择;支持 UTF8 编码,可在一个终端屏幕显示多种语言,方便处理不同语言编写的数据库;支持 VB 脚本,用户可使用脚本自动处理单调、重复的任务;支持 IPv6,满足不同网络环境的需求。

Xftp

  • 功能定位:是一个功能强大的 FTP 和 SFTP 文件传输软件,用于在 Windows 与 Unix/Linux 系统之间安全地传输文件。
  • 主要特点
    • 安全可靠:支持 SFTP 协议,对所有通过该软件的网络流量进行加密,提供安全的数据传输环境,防止数据被截获或泄露。
    • 界面友好:采用标准的 Windows 风格向导,界面直观,易于使用,能与其他 Windows 应用程序紧密协同工作,适应不同层次用户的需求。
    • 功能强大:具有同步功能,可以帮助用户同步文件和文件夹以及远程与本地文件夹的路径;支持多任务处理,允许用户在单个窗口打开多个会话,通过会话选项卡界面在不同服务器之间轻松传输文件;提供自定义编辑器选项,用户可选择自己喜欢的编辑器,而不是使用默认的 Windows 记事本。

有一个免费的网站可以下载:Xshell-Xmanager-Xftp 8下载-安全终端模拟软件-Xshell中文网

下载试用:

提交信息后,会在你留下的邮箱中收到:

复制到浏览器中,打开即可激活,就可使用了。

xftp是一样的办法也可免费使用。

用法比较简单,就不在这里赘述了。

4.OpenSSH

        OpenSSH 是一款用于安全远程连接和计算机管理的工具套件,它通过加密技术来保障通信安全,其主要功能包括远程登录、命令执行、文件传输和端口转发等。

   OpenSSH 包含客户端和服务器两部分,其中:

  • 客户端:用于连接远程服务器。
  • 服务器:在远程服务器上运行,接受客户端的连接请求。

     OpenSSH 最初是为 Linux 系统开发的,现在也支持包括 Windows 和 macOS 在内的多种操作系统。

      它的使用方法可参考下面的博客:

Windows 上的 OpenSSH:安装、配置和使用指南 - 商君治国安邦之张莽 - 博客园

5.SecureCRT

        SecureCRT是一款支持 SSH2、SSH1、Telnet、Telnet/SSH、Relogin、Serial、TAPI、RAW 等协议的终端仿真程序,支持标签化SSH对话,从而可方便地管理多个SSH连接,是Windows下登录UNIX、Linux服务器主机的软件。

     核心功能

  1. 多协议支持

    • SSH1/SSH2:加密远程连接,支持密钥认证(RSA、DSA、ECDSA)。
    • Telnet/RLOGIN:兼容老旧系统的明文协议。
    • 串口连接:支持通过 COM 口连接硬件设备(如路由器、交换机)。
  2. 会话管理

    • 保存服务器配置(主机名、端口、用户名、密码 / 密钥),支持分组管理。
    • 快速切换会话标签页,支持会话克隆(右键→Clone Session)。
  3. 高级终端功能

    • 多标签页:同时管理多个连接,支持拖拽调整顺序。
    • 分屏会话:在同一窗口分割显示多个终端(Session → Split Horizontally/Vertically)。
    • 命令高亮:支持语法高亮(如 Python、Bash)和自定义配色方案。
    • 自动完成:输入命令时自动补全历史命令或文件路径。
  4. 文件传输

    • 集成 SecureFX(需单独安装或购买),支持 SFTP/FTP 传输。
    • 拖放文件:直接从本地资源管理器拖拽文件到终端窗口上传。
  5. 脚本与自动化

    • 支持 VBScript、Python 脚本,自动执行重复性任务(如批量配置服务器)。
    • 示例脚本:                
' 自动登录并执行命令
Sub Main()crt.Session.Connect "/SSH2 user@host -pw password"crt.Screen.Send "ls -l" & vbCrcrt.Screen.WaitForString ">"
End Sub

6.总结

        除了上面介绍的几个ssh远程操作工具,当然还有很多的其它工具,这里就不一一介绍了。好的工具对提升工作效率有很大的意义。上面介绍的几个都是工作当中我觉得好用的方式,SCP命令最简单也最为使用,啥软件也不用装,但是不直观。其它几个有界面的,操作简单,避免了复杂的输命令。其实这些在不用的场合都有使用它的场景。各有各的用处,在各自的应用场景上都比较好用。

相关文章:

  • 查询消耗 IO 多的 SQL -达梦
  • 国产12537穿甲弹侵彻仿真(显式动力学)
  • Python期末速成
  • UMAP:用于降维的均匀流形近似和投影实验
  • MongoDB 8.0.10 windows11安装记录
  • Python SQLModel 简单使用
  • 《计算机网络:自顶向下方法(第8版)》Chapter 8 课后题
  • 链接脚本基础语法
  • 面试150 除自身以外数组的乘积
  • 今日推荐:data-engineer-handbook
  • 包教包会,ES6类class的基本入门
  • 本地编译LibreHardwareMonitor
  • 仕么是Transformer以及工作原理和架构
  • 人工智能、机器人最容易取哪些体力劳动和脑力劳动
  • MySQL学习(1)——基础库操作
  • C++智能指针编程实例
  • Redis-CPP 5大类型操作
  • C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测
  • Kotlin 中为什么没有静态变量和静态方法—不用static?
  • 鸿蒙 Column 组件指南:垂直布局核心技术与场景化实践
  • 做网站哪里比较好/营销比较成功的品牌
  • 免费开发个人网站/查收录网站
  • dedecms 手机网站模板/新站如何快速收录
  • 可视化编辑网站开发/他达拉非片正确服用方法
  • 衢州网站设计排名/seo专业培训学费多少钱
  • 网站开发用什么软件编程/口碑优化seo