温馨提示×

Linux SFTP命令大全及使用技巧

小樊
32
2025-10-19 02:07:32
栏目: 智能运维

Linux SFTP命令大全及使用技巧

一、基础连接与退出

SFTP(SSH File Transfer Protocol)是基于SSH的加密文件传输协议,用于在本地与远程Linux服务器之间安全传输文件。
连接远程服务器:使用username@hostname格式连接,若服务器SSH端口非默认的22,需通过-P参数指定(注意是大写P)。

sftp username@hostname # 默认端口22连接 sftp -P 2222 username@hostname # 指定端口2222连接 

退出会话:输入exitbye即可断开连接。

二、常用文件传输命令

1. 单文件传输

  • 上传本地文件到远程put命令将本地文件复制到远程服务器,可指定远程路径(未指定则保存到当前远程目录)。
    put local_file.txt # 上传到远程当前目录 put local_file.txt /remote/dir/ # 上传到远程指定目录 
  • 下载远程文件到本地get命令将远程文件复制到本地,同样可指定本地路径。
    get remote_file.txt # 下载到本地当前目录 get remote_file.txt /local/dir/ # 下载到本地指定目录 

2. 批量文件传输

  • 上传多个文件mput命令配合通配符(如*.txt)批量上传本地文件。
    mput *.txt # 上传所有.txt文件 
  • 下载多个文件mget命令配合通配符批量下载远程文件。
    mget *.log # 下载所有.log文件 
  • 递归传输目录:使用-r参数递归上传/下载整个目录(包括子目录及文件)。
    put -r local_dir /remote/dir/ # 递归上传本地目录 get -r /remote/dir local_dir # 递归下载远程目录 

3. 高级传输技巧

  • 断点续传:部分SFTP客户端(如lftp)支持断点续传,可通过reget(下载续传)和reput(上传续传)命令实现(原生SFTP需借助rsync)。
  • 传输速率限制:使用-l参数限制带宽(单位:Kbps),避免占用过多网络资源。
    sftp -l 1024 username@hostname # 限制速率为1Mbps 

三、文件与目录管理命令

1. 远程服务器操作

  • 查看目录内容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 # 重命名文件 

2. 本地机器操作

  • 查看本地目录lls(部分客户端支持)或通过!ls执行本地Shell命令查看。
    lls # 查看本地当前目录(部分客户端) !ls # 执行本地ls命令 
  • 切换/显示本地目录lcd切换本地目录,lpwd显示本地当前工作目录。
    lcd /local/path # 切换到本地指定目录 lpwd # 显示本地当前目录路径 
  • 创建/删除本地目录lmkdir创建本地目录,lrmdir删除本地空目录。
    lmkdir local_dir # 创建本地新目录 lrmdir local_empty_dir # 删除本地空目录 

3. 文件权限与所有权

  • 修改文件权限chmod修改远程文件权限(如644表示所有者读写、组及其他用户只读)。
    chmod 644 remote_file.txt # 修改远程文件权限 
  • 修改文件所有者chown修改远程文件所有者(需root权限),格式为chown user:group file
    chown user:group remote_file.txt # 修改远程文件所有者 

四、高级使用技巧

1. 批处理脚本

将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 

2. 远程命令执行

在SFTP会话中,可通过!前缀执行本地Shell命令(如lspwd),或直接执行远程基本命令(如lsrm)。

# 执行本地命令 !ls /local/path # 列出本地目录 # 执行远程命令 ls /remote/path # 列出远程目录 

3. 编辑远程文件

使用edit命令调用本地默认文本编辑器(如vimnano)编辑远程文件,修改后自动上传到服务器。

edit /remote/path/file.txt # 编辑远程文件 

4. 自动化脚本集成

结合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." 

5. 结合其他工具

  • rsync同步:通过-e sftp参数使用rsync同步本地与远程目录,支持增量传输(仅传输变化的部分)和断点续传。
    rsync -avz -e "sftp" /local/dir/ username@remote_host:/remote/dir/ 
  • scp替代:若无需交互式操作,可使用scp命令直接复制文件(更简洁),但SFTP更适合复杂文件管理(如目录操作、权限修改)。
    scp /local/file.txt username@remote_host:/remote/dir/ 

五、注意事项

  • 权限配置:确保远程用户对目标目录有读写权限(如chmod 755 /remote/dir),避免传输失败。
  • 安全性:优先使用SSH密钥认证(-i private_key)替代密码认证,防止密码泄露;可通过/etc/ssh/sshd_config限制SFTP用户访问(如ChrootDirectory限制用户只能访问其主目录)。
  • 防火墙:确保服务器防火墙开放SSH端口(默认22),避免连接被拒绝。
  • 路径问题:使用绝对路径(如/remote/dir/file.txt)避免路径错误,相对路径基于当前工作目录。

0