当前位置:首页 > 行业动态 > 正文

如何在Linux系统下使用SFTP进行文件传输?

在Linux下,使用SFTP(Secure File Transfer Protocol)进行文件传输,可以通过命令 sftp实现。连接远程服务器的命令是: sftp username@hostname。

Linux下sftp使用详解

如何在Linux系统下使用SFTP进行文件传输?  第1张

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”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

0