SFTP(SSH File Transfer Protocol)是基于SSH的加密文件传输协议,用于在本地与远程Linux服务器之间安全传输文件。
连接远程服务器:使用username@hostname格式连接,若服务器SSH端口非默认的22,需通过-P参数指定(注意是大写P)。
sftp username@hostname # 默认端口22连接 sftp -P 2222 username@hostname # 指定端口2222连接 退出会话:输入exit或bye即可断开连接。
put命令将本地文件复制到远程服务器,可指定远程路径(未指定则保存到当前远程目录)。put local_file.txt # 上传到远程当前目录 put local_file.txt /remote/dir/ # 上传到远程指定目录 get命令将远程文件复制到本地,同样可指定本地路径。get remote_file.txt # 下载到本地当前目录 get remote_file.txt /local/dir/ # 下载到本地指定目录 mput命令配合通配符(如*.txt)批量上传本地文件。mput *.txt # 上传所有.txt文件 mget命令配合通配符批量下载远程文件。mget *.log # 下载所有.log文件 -r参数递归上传/下载整个目录(包括子目录及文件)。put -r local_dir /remote/dir/ # 递归上传本地目录 get -r /remote/dir local_dir # 递归下载远程目录 lftp)支持断点续传,可通过reget(下载续传)和reput(上传续传)命令实现(原生SFTP需借助rsync)。-l参数限制带宽(单位:Kbps),避免占用过多网络资源。sftp -l 1024 username@hostname # 限制速率为1Mbps ls命令列出远程当前目录内容,-l参数显示详细信息(权限、大小、修改时间等)。ls # 列出当前目录内容 ls -l # 显示详细信息 ls /remote/path # 列出指定目录内容 cd切换远程目录,pwd显示远程当前工作目录。cd /remote/path # 切换到指定目录 pwd # 显示远程当前目录路径 cd .. # 返回上级目录 mkdir创建远程目录,rmdir删除空远程目录(需确保目录为空)。mkdir new_dir # 创建新目录 rmdir empty_dir # 删除空目录 rm删除远程文件,rename重命名远程文件。rm old_file.txt # 删除文件 rename old_file.txt new_file.txt # 重命名文件 lls(部分客户端支持)或通过!ls执行本地Shell命令查看。lls # 查看本地当前目录(部分客户端) !ls # 执行本地ls命令 lcd切换本地目录,lpwd显示本地当前工作目录。lcd /local/path # 切换到本地指定目录 lpwd # 显示本地当前目录路径 lmkdir创建本地目录,lrmdir删除本地空目录。lmkdir local_dir # 创建本地新目录 lrmdir local_empty_dir # 删除本地空目录 chmod修改远程文件权限(如644表示所有者读写、组及其他用户只读)。chmod 644 remote_file.txt # 修改远程文件权限 chown修改远程文件所有者(需root权限),格式为chown user:group file。chown user:group remote_file.txt # 修改远程文件所有者 将SFTP命令写入文本文件(如sftp_commands.txt),通过-b参数批量执行,适用于自动化重复任务(如定期备份)。
# 创建批处理文件 echo "put /local/file.txt /remote/dir/" > sftp_commands.txt echo "get /remote/file.txt /local/dir/" >> sftp_commands.txt echo "bye" >> sftp_commands.txt # 执行批处理 sftp -b sftp_commands.txt username@hostname 在SFTP会话中,可通过!前缀执行本地Shell命令(如ls、pwd),或直接执行远程基本命令(如ls、rm)。
# 执行本地命令 !ls /local/path # 列出本地目录 # 执行远程命令 ls /remote/path # 列出远程目录 使用edit命令调用本地默认文本编辑器(如vim、nano)编辑远程文件,修改后自动上传到服务器。
edit /remote/path/file.txt # 编辑远程文件 结合Shell脚本与SFTP命令,实现无密码登录(通过SSH密钥)和自动化文件传输。例如,以下脚本自动上传本地文件到远程服务器:
#!/bin/bash # SFTP服务器信息 USER="username" HOST="example.com" REMOTE_DIR="/remote/dir" LOCAL_FILE="/local/file.txt" PRIVATE_KEY="/path/to/private_key" # 执行SFTP命令 sftp -i "$PRIVATE_KEY" -b - "$USER@$HOST" <<EOF put "$LOCAL_FILE" "$REMOTE_DIR" bye EOF echo "File transfer completed." -e sftp参数使用rsync同步本地与远程目录,支持增量传输(仅传输变化的部分)和断点续传。rsync -avz -e "sftp" /local/dir/ username@remote_host:/remote/dir/ scp /local/file.txt username@remote_host:/remote/dir/ chmod 755 /remote/dir),避免传输失败。-i private_key)替代密码认证,防止密码泄露;可通过/etc/ssh/sshd_config限制SFTP用户访问(如ChrootDirectory限制用户只能访问其主目录)。/remote/dir/file.txt)避免路径错误,相对路径基于当前工作目录。