sftp
实现。连接远程服务器的命令是:sftp username@hostname
。Linux下sftp使用详解
SFTP(Secure File Transfer Protocol)是一种在客户端和服务器之间传输文件的安全协议,基于SSH(Secure Shell)协议,与传统的FTP相比,SFTP提供了数据加密和身份验证功能,确保文件传输的安全性,本文将详细介绍如何在Linux系统上安装、配置和使用SFTP,包括上传和下载文件、目录操作等。
安装和配置SFTP
在开始使用SFTP之前,首先需要在Linux系统上安装和配置SFTP,大多数Linux发行版默认安装了OpenSSH软件包,其中包含了SFTP服务,如果不确定是否已安装,可以使用以下命令检查:
dpkg -l | grep ssh
输出结果中应包含以下内容:
ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
如果没有安装,可以通过以下命令安装:
sudo apt-get install openssh-server openssh-client
对于RHEL/CentOS/Fedora/Rocky Linux用户,可以使用以下命令:
sudo yum install openssh-server openssh-client
创建组和用户
为了安全起见,建议为SFTP服务器创建一个新组和新用户,以下是具体步骤:
创建一个新组'sftpgroup' sudo groupadd sftpgroup 创建一个新用户'sftpuser',并将其添加到'sftpgroup'组 sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser 为用户'sftpuser'设置密码 sudo passwd sftpuser
设置Chroot监狱目录
为了防止SFTP用户访问整个文件系统,可以将其限制在指定的目录中,以下是具体步骤:
创建新的主目录 mkdir -p /srv/sftpuser 修改目录的所有权 sudo chown root:root /srv/sftpuser sudo chmod 755 /srv/sftpuser 在新的主目录下创建一个'data'目录,并更改其所有权 mkdir -p /srv/sftpuser/data sudo chown sftpuser:sftpgroup /srv/sftpuser/data
配置SSH以启用SFTP
编辑SSH配置文件/etc/ssh/sshd_config
,添加以下内容:
Subsystem sftp internal-sftp Match Group sftpgroup ChrootDirectory /srv/sftpuser AllowTcpForwarding no X11Forwarding no ForceCommand internal-sftp
保存并退出编辑器后,重新启动SSH服务使配置生效:
sudo systemctl restart sshd
连接远程服务器
连接到远程SFTP服务器的命令格式如下:
sftp username@hostname
sftp tecmint@192.168.56.10
连接成功后,系统会提示输入密码,输入正确的密码后即可进入SFTP交互模式。
文件传输
上传文件
使用put
命令上传单个文件:
sftp>gt; put local_file [remote_file]
将本地文件/home/user/test.txt
上传到远程服务器的/test
目录下,并将其重命名为test_upload.txt
:
put /home/user/test.txt /test/test_upload.txt
下载文件
使用get
命令下载单个文件:
get remote_file [local_file]
从远程服务器的/test
目录下下载文件test.txt
到本地计算机的下载目录,并将其重命名为download.txt
:
get /test/test.txt ~/Downloads/download.txt
上传文件夹
使用put -r
命令递归上传整个目录及其子目录和子文件:
put -r local_dir_name [remote_dir_name]
将本地目录Tecmint.com-articles
上传到远程服务器的当前工作目录:
mkdir uploads # 在远程主机上创建具有相同名称的目录 put -r Tecmint.com-articles uploads/
下载文件夹
使用get -r
命令递归下载整个目录及其子目录和子文件:
get -r remote_dir_name [local_dir_name]
从远程服务器下载整个fstools-0.0
文件夹到本机的当前工作目录:
get -r fstools-0.0 ./
目录操作
切换目录
使用cd
命令切换到远程服务器上的指定目录:
cd remote_dir
查看当前目录
使用pwd
命令显示当前所在的远程目录:
pwd
列出文件和目录
使用ls
命令列出远程服务器上的文件和目录:
ls [remote_dir]
如果不指定目录,则默认显示当前目录的内容。
创建目录
使用mkdir
命令在远程服务器上创建新目录:
mkdir remote_dir
删除目录
使用rmdir
命令删除远程服务器上的空目录:
rmdir remote_dir
删除文件
使用rm
命令删除远程服务器上的文件:
rm remote_file
退出SFTP会话
使用exit
或bye
命令退出SFTP会话:
exit bye
自动化文件传输Shell脚本示例
以下是一个使用SFTP命令的Shell脚本示例,用于自动化地将本地文件上传到远程服务器:
#!/bin/bash 定义SFTP服务器地址、用户名、本地文件路径、远程文件路径 SFTP_SERVER="sftp.example.com" SFTP_USER="username" LOCAL_FILE="/path/to/local/file" REMOTE_FILE="/path/to/remote/file" 建立SFTP连接并上传文件 sftp $SFTP_USER@$SFTP_SERVER <<EOF put $LOCAL_FILE $REMOTE_FILE exit EOF 检查文件是否上传成功 if [ $? -eq 0 ]; then echo "文件上传成功!" else echo "文件上传失败!" fi
通过本文的介绍,您已经了解了如何在Linux系统上安装、配置和使用SFTP进行文件传输,SFTP不仅提供了文件传输的功能,还通过SSH协议确保了数据传输的安全性,无论是上传还是下载文件和目录,SFTP都提供了灵活且强大的命令支持,希望这些信息对您有所帮助!
各位小伙伴们,我刚刚为大家分享了有关“linux下sftp”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!