SSH (Secure Shell) 不仅是远程登录的安全协议,也是系统管理员进行安全文件传输的重要工具。以下是几种常用的SSH文件传输方法:
SCP是基于SSH的文件传输工具,语法类似于传统的cp命令。
# 从本地复制到远程
scp /path/to/local/file username@remotehost:/path/to/remote/directory
# 从远程复制到本地
scp username@remotehost:/path/to/remote/file /path/to/local/directory
# 复制整个目录(使用-r递归选项)
scp -r /local/directory username@remotehost:/remote/directory
-P port
:指定SSH端口(默认为22)-C
:启用压缩-p
:保留文件修改时间、访问时间和权限-q
:静默模式,不显示传输进度SFTP提供了交互式的文件传输界面,功能比SCP更丰富。
# 连接到远程服务器
sftp username@remotehost
# 常用SFTP命令:
put localfile # 上传文件
get remotefile # 下载文件
ls # 列出远程目录
lls # 列出本地目录
cd path # 更改远程目录
lcd path # 更改本地目录
mkdir dirname # 创建远程目录
exit # 退出
rsync是更高效的文件同步工具,特别适合大文件或定期备份。
# 本地到远程同步
rsync -avz /local/path/ username@remotehost:/remote/path/
# 远程到本地同步
rsync -avz username@remotehost:/remote/path/ /local/path/
-a
:归档模式(保留权限、符号链接等)-v
:详细输出-z
:传输时压缩--delete
:删除目标中源没有的文件(谨慎使用)--exclude
:排除特定文件或目录通过FUSE将远程目录挂载到本地文件系统。
# 安装SSHFS(Ubuntu/Debian)
sudo apt install sshfs
# 创建挂载点
mkdir ~/remote_mount
# 挂载远程目录
sshfs username@remotehost:/remote/path ~/remote_mount
# 卸载
fusermount -u ~/remote_mount
使用密钥认证而非密码:
ssh-keygen -t rsa -b 4096
ssh-copy-id username@remotehost
限制用户权限:为文件传输创建专用账户
使用非标准端口:修改SSH默认端口(/etc/ssh/sshd_config)
禁用root登录:在sshd_config中设置PermitRootLogin no
使用防火墙:限制可访问SSH服务的IP范围
断点续传(使用rsync):
rsync --partial --progress -avz largefile username@remotehost:/path/
带宽限制:
scp -l 1000 file username@remotehost:/path/ # 限制为1000Kbit/s
多文件并行传输:
parallel -j 4 scp {} username@remotehost:/path/ ::: file1 file2 file3 file4
通过中间跳板机传输:
scp -o ProxyJump=jumpuser@jumphost file username@targethost:/path/
掌握这些SSH文件传输技术将大大提高系统管理员的工作效率和安全性。