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 服务组件有:
组件 | 说明 |
---|---|
sshd | SSH 服务器守护进程,监听 22 端口 |
ssh | SSH 客户端命令行程序 |
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 客户端):
- 下载 PuTTY,输入服务器 IP 和端口。
- 选择 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服务器主机的软件。
核心功能
-
多协议支持
- SSH1/SSH2:加密远程连接,支持密钥认证(RSA、DSA、ECDSA)。
- Telnet/RLOGIN:兼容老旧系统的明文协议。
- 串口连接:支持通过 COM 口连接硬件设备(如路由器、交换机)。
-
会话管理
- 保存服务器配置(主机名、端口、用户名、密码 / 密钥),支持分组管理。
- 快速切换会话标签页,支持会话克隆(右键→Clone Session)。
-
高级终端功能
- 多标签页:同时管理多个连接,支持拖拽调整顺序。
- 分屏会话:在同一窗口分割显示多个终端(Session → Split Horizontally/Vertically)。
- 命令高亮:支持语法高亮(如 Python、Bash)和自定义配色方案。
- 自动完成:输入命令时自动补全历史命令或文件路径。
-
文件传输
- 集成 SecureFX(需单独安装或购买),支持 SFTP/FTP 传输。
- 拖放文件:直接从本地资源管理器拖拽文件到终端窗口上传。
-
脚本与自动化
- 支持 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命令最简单也最为使用,啥软件也不用装,但是不直观。其它几个有界面的,操作简单,避免了复杂的输命令。其实这些在不用的场合都有使用它的场景。各有各的用处,在各自的应用场景上都比较好用。