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)避免路径错误,相对路径基于当前工作目录。