1. SFTP基础入门安全传输第一课第一次接触SFTP时我盯着那个黑乎乎的终端窗口手足无措。作为替代传统FTP的安全传输方案SFTP最大的特点就是全程加密传输就像给你的文件套上了防弹衣。想象一下寄快递普通FTP相当于用透明塑料袋包装而SFTP则是用密码锁金属箱运送。要建立连接其实特别简单打开终端输入sftp usernameserver_ip系统会提示输入密码验证通过后就能看到sftp的命令行提示符。这里有个实用技巧如果服务器用的不是默认的22端口需要加上-P参数比如连接2222端口就是sftp -P 2222 userhost连接成功后建议先做两件事用df -h查看远程服务器磁盘空间用!df -h查看本地磁盘情况。有次我传大文件到服务器传了半小时才发现对方磁盘已满这种低级错误完全可以避免。2. 文件操作全攻略从菜鸟到高手2.1 目录导航技巧sftp环境下有两套独立的目录系统远程服务器和本地机器。用pwd显示远程当前路径!pwd显示本地路径。切换目录时cd remote_path改变远程工作目录lcd local_path改变本地工作目录有个特别实用的技巧用!执行本地shell命令。比如想查看本地/home目录下的图片可以直接输入!ls -l /home/*.jpg2.2 文件传输实战上传单个文件用put下载用get但实际使用时要注意这些细节大文件传输建议加上-P参数显示进度条遇到中文文件名乱码时尝试加-r递归传输整个目录传输中断后重新连接可以用reget和reput续传实测传输速度对比文件大小普通FTPSFTP加密传输100MB12秒15秒1GB2分10秒2分30秒虽然速度稍慢但安全性提升了好几个量级。我曾用Wireshark抓包测试普通FTP的所有操作和文件内容都明文可见而SFTP传输的全是加密数据。3. 批处理脚本解放双手的自动化方案3.1 基础批处理脚本把常用操作写成脚本能省去重复劳动。新建upload.sh文件#!/bin/bash sftp -b - userhost EOF put /local/path/file1.txt put /local/path/file2.txt get /remote/path/data.csv exit EOF这个脚本会依次执行上传两个文件、下载一个文件的操作。注意EOF到EOF之间的内容就是批处理命令最后一定要有exit退出。3.2 高级批量操作结合shell循环实现更强大的功能。比如需要上传某个日期之后的所有日志文件#!/bin/bash target_date2023-06-01 for file in /var/log/*.log; do if [ -f $file ] [ $(date -r $file %F) $target_date ]; then echo put $file temp_commands.sftp fi done sftp -b temp_commands.sftp userhost rm temp_commands.sftp4. 常见问题排坑指南4.1 连接故障排查遇到连接问题时按这个顺序检查网络是否通畅ping host端口是否开放telnet host 22权限是否正确检查服务器/etc/ssh/sshd_config配置密钥是否匹配删除~/.ssh/known_hosts中对应条目重试4.2 传输异常处理文件传输中断时先检查磁盘空间df -h和!df -h文件权限ls -l查看权限位网络状况sftp -v启用详细日志有次我遇到传输速度突然降到10KB/s最后发现是服务器开启了流量限制。这种情况可以用scp -l 1000限制带宽为1000Kbit/s避免被服务器当作攻击流量拦截。5. 安全加固与性能优化5.1 密钥认证配置比密码更安全的登录方式是密钥认证。生成密钥对ssh-keygen -t rsa -b 4096把公钥上传到服务器ssh-copy-id userhost之后sftp连接就不再需要输入密码了。建议在~/.ssh/config中添加配置Host myserver HostName server_ip User username Port 2222 IdentityFile ~/.ssh/id_rsa这样直接用sftp myserver就能连接既安全又方便。5.2 传输加速技巧通过调整SSH参数可以提升传输速度。在/etc/ssh/ssh_config或~/.ssh/config中加入Host * Compression yes Ciphers aes128-ctr MACs hmac-sha1实测这个配置能让传输速度提升20%左右。但要注意加密强度会有所降低适合内网等相对安全的环境。