如何在 Ubuntu 22.04 中创建 SFTP 用户(无 Shell 访问)

2023-11-03

SFTP 是一种允许通过网络安全传输文件的协议。它经常被企业和个人用来传输敏感数据。 SFTP 与 FTP 类似,但使用不同的协议进行通信。 SFTP 比 FTP 更安全,通常与 SSH(Secure Shell)结合使用以提供更高级别的安全性。

在本教程中,我们将帮助您在 Ubuntu 22.04 系统上设置 SFTP 服务器并创建仅 SFTP 用户。该帐户可以通过 SFTP 连接,但无法通过 SSH 连接。此外,这会将 SFTP 用户限制(chroot)到特定目录。

先决条件

  • 具有 shell 访问权限的正在运行的 Ubuntu 22.04 LTS 系统
  • 需要 sudo 特权帐户

第 1 步 – 安装 OpenSSH 服务器

Ubuntu 服务器已经安装了 OpenSSH 服务器,但桌面系统可能还没有。使用以下命令安装并运行 OpenSSH 服务器:

sudo apt update && sudo apt install openssh-server 

第 2 步 – 创建 SFTP 用户

首先,在您的系统中创建一个新帐户作为 sftp 用户。

以下命令将创建一个名为的新帐户sftpuser没有 shell 访问权限。您可以更改您选择的用户名

sudo adduser --shell /bin/false sftpuser 
Create SFTP user in Ubuntu
Creating SFTP user in Ubuntu

步骤 3 – 配置 SFTP 目录

现在,创建可供 sftp 用户访问的目录结构。

sudo mkdir -p /var/sftp/files 

这里我们将只允许用户访问“files”目录。

现在,将文件目录的所有权更改为 sftpuser。这样 sftpuser 只能对该目录进行读写。

sudo chown sftpuser:sftpuser /var/sftp/files 

并将/var/sftp的所有者和组所有者设置为root。 root 用户对此访问具有读/写访问权限。组成员和其他帐户只有读取和执行权限。

sudo chown root:root /var/sftp 
sudo chmod 755 /var/sftp 

步骤 4 – 更新 SSH 配置文件

现在在文本编辑器中编辑 SSH 配置文件

sudo vim /etc/ssh/sshd_config 

并在文件末尾添加以下设置。


Match User sftpuser
	ForceCommand internal-sftp
	PasswordAuthentication yes
	ChrootDirectory /var/sftp
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no
  

确保在之后添加配置子系统线如下图所示:

SFTP Only Configuration  on Ubuntu
SFTP only configuration on Ubuntu

保存配置文件并关闭它。

现在验证配置文件。

sudo sshd -t 

如果验证成功,则不会显示任何输出。如果输出中显示任何错误,请确保在运行下一个命令之前修复它。

重新启动 SSH 服务以应用更改。

sudo systemctl restart ssh 

全做完了。已在您的 Ubuntu 系统上成功创建仅 SFTP 用户。现在尝试使用新用户的凭据登录远程系统,并检查一切是否正常工作。

第 5 步 – 连接到 SFTP 用户

可以使用命令行或 Filezilla 或 WinSCP 等图形应用程序连接到远程 SFTP 服务器。在本教程中,我将向您展示将 sftp 仅连接到 Ubuntu 系统上的帐户的两种方法。

Linux 用户可以使用 sftp 命令行实用程序连接到远程 sftp 实例。

sftp sftpuser@192.168.1.210 

sftpuser@192.168.10.100's password:
sftp>

您还可以使用 FileZilla 等图形界面应用程序连接到远程 SFTP 服务器。 Linux 和 Windows 用户都可以使用该功能。打开 Filezilla 应用程序并输入 sftp 详细信息:

  • Host:sftp://系统 IP 主机
  • 用户名:使用步骤 1 中创建的 SFTP 用户。
  • 密码:使用步骤 1 中创建的 SFTP 用户密码。
  • Port:使用 SSH 服务器端口或将默认端口保留为空。

点击快速连接 button:

验证没有 shell 访问权限:

由于此帐户配置为仅 SFTP 连接。因此,如果任何用户尝试通过 SSH 连接,身份验证成功后将立即断开连接。用户将收到以下消息:

ssh sftpuser@192.168.1.210  

sftpuser@sftp.tecadmin.net's password:
This service allows sftp connections only.
Connection to sftp.tecadmin.net closed.

结论

总之,设置 SFTP 服务器是在计算机之间安全传输文件的好方法。按照本文中的步骤,您可以立即在 Ubuntu 系统上设置自己的 SFTP 服务器。如果您有任何疑问,请随时在下面发表评论,我们将很乐意为您提供帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 22.04 中创建 SFTP 用户(无 Shell 访问) 的相关文章

  • 在 bash 中使用 ssh 内的 Expect 执行 sudo

    我想创建一个脚本来自动在多个 Linux 主机上进行安装 我使用 ssh 密钥登录到主机 在登录中我想做一个 sudo 我正在尝试使用 Expect 我在站上有它 但是我的服务器上没有运行脚本 我该怎么做 这是我的尝试 但没有运气 bin
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • Windows 7 上的 VirtualBox 端口转发不起作用

    Windows 7 上的 VirtualBox 端口转发不起作用 我尝试通过端口转发从我的 Windows 7 主机 ssh 到我的 VirtualBox 但 VirtualBox 不会打开端口进行侦听 我可以通过打开 VirtualBox
  • 有没有办法使用 Paramiko 和 Python 来获取您连接的 SSH 服务器的横幅?

    有没有办法使用 Paramiko 和 Python 来获取您尝试连接的 SSH 服务器的横幅 我正在处理许多机器的超安全服务器设置过程 密码是通过预定义的密钥生成的 该密钥与 SSH 横幅一起打印出来 我可以访问将为我提供密码的实用程序 但
  • 从 Bash 调用的 Expect 脚本的退出状态代码

    我制作了一个 Bash 脚本 它使用 Expect 脚本来自动进行 ssh 登录 该脚本连接到多个服务器并运行一些命令 bash 脚本会提示输入一次登录凭据 我想合并一个功能 其中如果第一个服务器登录失败 脚本将终止 以避免脚本检查下一个服
  • 限制 SFTP 用户只能访问主目录

    我正在尝试在 EC2 ubuntu 服务器上设置客户端 SFTP 空间 访问权限仅限于该用户的主目录 关于此的其他主题只有大约六千个 而且我在其他选项卡中打开了其中的大多数主题 这看起来很简单 我已经搞定了 sudo groupadd lo
  • ssh:无法确定主机“主机名”的真实性

    当我 ssh 到一台机器时 有时我会收到此错误警告 并提示说 是 或 否 当从自动 ssh 到其他机器的脚本运行时 这会导致一些问题 警告信息 The authenticity of host
  • 如何在接收端打开没有 SSHD 的 shell?

    我有一台没有 SSHD 的机器 我想从远程机器 我可以完全控制 在这台机器上打开 bash shell 由于我的有限机器上有 SSH 因此我配置了反向代理 ssh R 19999 localhost 22 remoteuser remote
  • 如何在 ssh 命令中使用长输入参数正确转义 qsub 命令?

    我有一个复杂的 qsub 命令可以远程运行 PROJECT NAME TEXT TEST PROJECT PACK ORGANIZATION source organization MY ORGANIZATION CONTACT NAME
  • 为什么 ssh-agent 需要 root 访问权限?

    我刚刚安装了 Archbang 并尝试克隆我的 Git 项目 这需要 SSH 密钥 过去 我在 Ubuntu 和 RedHat 机器上遵循 Github 指南取得了成功 但由于某种原因 它在我的新 Arch 安装上不起作用 我已使用以下命令
  • 如何让SSH命令执行超时

    我有一个这样的程序 ssh q email protected cdn cgi l email protection exit echo output value gt 在上面的代码中 我尝试通过 SSH 连接到远程服务器 并尝试检查是否可
  • 使用Python mysql.connector远程连接MySQL

    以下代码 在同一 LAN 内与 mysql 服务器不同的机器上运行 使用 Python3 和 mysql connector 本地连接到 MySQL 数据库 import mysql connector cnx mysql connecto
  • 如何访问 Google Cloud Platform Compute Engine VM 实例的 SSH 密钥?

    我通过 Google Cloud Web 控制台从 CentOS 6 x 映像创建了一个新实例 我在创建表单上看到一个空白 我可以在其中粘贴现有的 SSH 密钥 因为这是我的第一个实例 所以我还没有 我以为它会像 Amazon EC2 一样
  • 无法通过 SSH 连接到 EC2 实例

    因此 我从网上启动了我的实例 下载了密钥对并安装了它 大约一天的时间里一切都运行良好 然后我重新启动了计算机 但我无法再通过 SSH 连接到它 我尝试重新下载密钥对并重新安装它 但我不断收到 权限被拒绝 公钥 错误 这是详细的输出 我也尝试
  • 为什么 SSH 远程命令获得的环境变量比手动运行时少? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如果我 ssh 到计算机并运行它 我有一个命令可以正常运行 但当我尝试使用远程 ssh 命令运行它时会失败 例如 ssh user IP
  • 通过 SSH 的 Pygame 不注册击键(Raspberry Pi 3)

    所以我得到了 raspi 3 和简单的 8x8 LED 矩阵 在玩了一些之后 我决定用 pygame 的事件制作一个简单的蛇游戏 显示在该矩阵上 我之前没有 pygame 的经验 除了 LED 矩阵之外 没有连接任何屏幕 显示器 所以最初的
  • 如何记录 ssh 调试信息?

    我需要将 ssh 调试信息的输出写入文件中 这 ssh v email protected cdn cgi l email protection gt result txt ssh v email protected cdn cgi l e
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic
  • 我可以在本地使用 RSA 密钥测试身份验证吗?

    有没有办法在本地检查您是否为 RSA 密钥提供了正确的密码 最近 我在将一些提交推送到 github 时遇到了麻烦 因为推送提示输入密码 然后身份验证失败 我验证了 github 具有正确的公钥id rsa文件在我的 ssh目录 并且我验证

随机推荐

  • Qt中信号槽的连接方式

    Qt AutoConnection 如果信号发送者和接收者在同一线程 Qt DirectConnection被使用 否则Qt QueuedConnection被使用 Qt DirectConnection 信号发送 信号槽立刻执行 Qt Q
  • scheduler Unhealthy Get “http://127.0.0.1:10251/healthz“: dial tcp 127.0.0.1:10251: con

    解决方法 cd etc kubernetes manifest 然后将你的scheduler以及controll manager yaml中把port 0注释掉 containers command kube scheduler authe
  • gitlab如何创建用户并登录

    为了大家后期能方便创建用户和使用gitlab 先给大家设置为中文 设置为中文后保存然后刷新页面即可设置为中文 接下来教大家怎么创建git用户并进行登录 创建完用户后需要配置一次密码 配置完密码后退出用户测试进行新用户登录 这里用刚创建的新用
  • SpringBoot项目jar、war包启动解析

    一 jar包和war包的区别 1 1 war包 war包是Java Web应用程序的一种打包方式符合Servlet标准 它是Web Archive的缩写 主要用于存储Web应用程序相关的文件 包括Java类文件 JSP HTML CSS J
  • 动手实现Linux内核编译与安装

    Linux内核是一个用C语言写成的 符合POSIX标准的类Unix操作系统 内核是操作系统中最基本的一部分 提供了众多应用程序访问计算机硬件的机制 Linux内核的一大特点就是采用了整体式结构 有很多过程组成 每个过程都可以独立编译 其模块
  • C++ 好用的包管理工具--vcpkg

    背景 Windows 下开发 C C 程序 少不了编译开源的第三方库 使用这些库开发极大的方便了程序员 使得我们不必重复造轮子 由于开源库绝大部分都来源于 Linux 系统 将其移植到 Windows 的 VC 开发环境下编译比较复杂和麻烦
  • vite运行项目报错events.js:352 throw er; // Unhandled ‘error‘ event

    解决方法 运行命令 node node modules esbuild install js 启动项目 npm run dev
  • 图-文多模态,大模型,预训练

    参考老师的无敌课程 多模态任务是指需要同时处理两种或多种不同类型的数据 如图像 文本 音频等 的任务 例如 图像描述 image captioning 就是一种典型的多模态任务 它需要根据给定的图像生成相应的文本描述 多模态任务在人工智能领
  • 把url里的query参数转成对象格式

    const urlString http www xxx com name tom age 18 height 180 1 拿到 后的那部分 const queryString urlString split console log que
  • 详解10M/100M/1000M以太网接口物理层一致性测试

    以太网的起源与发展 1972年Metcalf与他在XeroxPARC的同事们 在研究如何将XeroxAltos工作站与其他XeroxAltos工作站 服务器以及激光打印机相互联网 他们成功地用一个网络实现了2 94Mb s的数据传输率的互联
  • Nginx 动静分离

    1 nginx 与 tomcat 处理静态资源区别 tomcat静态资源请求量为每秒1000次 则nginx静态资源请求量为每秒6000次 tomcat每秒的吞吐量为0 6M nginx的每秒吞吐量为3 6M 可以说 nginx处理静态资源
  • Python3 环境搭建介绍

    本章节我们将向大家介绍如何在本地搭建 Python3 开发环境 Python3 可应用于多平台包括 Windows Linux 和 Mac OS X Unix Solaris Linux FreeBSD AIX HP UX SunOS IR
  • 生成可执行程序四个步骤:预处理、编译、汇编、链接

    预处理 相当于根据预处理指令组装新的c c 程序 经过预处理 会产生一个没有头文件 都已经被展开了 宏定义 都已经替换了 没有条件编译指令 该屏蔽的都屏蔽掉了 没有特殊符号的输出文件 这个文件的含义同原本的文件无异 只是内容上有所不同 编译
  • 如何在 Apache 中启用或禁用 CGI 脚本

    通用网关接口 CGI 是一种标准协议 使 Web 服务器能够执行外部脚本并向 Web 客户端返回动态内容 Apache 是使用最广泛的 Web 服务器之一 它支持开箱即用的 CGI 脚本 在本文中 我们将解释如何在各种平台 包括 Ubunt
  • S3FS:在 Ubuntu 和 Debian 系统上安装 Amazon S3 存储桶

    Amazon S3 是一种高度可扩展且持久的对象存储服务 允许您从网络上的任何位置存储和检索任意数量的数据 S3FS 是 Amazon S3 的 FUSE 用户空间中的文件系统 接口 允许您将 Amazon S3 存储桶作为本地文件系统挂载
  • 如何在 CentOS/RHEL 8 上创建没有 Shell 访问权限的 SFTP 用户

    SFTP SSH 文件传输协议 是两个系统之间的安全文件传输协议 它通过 SSH 协议运行并共享相同的端口 22 本教程将帮助您在 CentOS 8 和 RedHat 8 系统上创建仅 SFTP 访问用户 无 ssh 访问权限 用户只能通过
  • 什么是MySQL?

    MySQL 是一个存储网站数据的数据库系统 它是一种 RDBMS 关系数据库管理系统 这意味着它将数据组织到表中 您可以使用 SQL 命令访问和更新数据 许多流行网站都使用 MySQL 包括 Facebook Twitter 和 YouTu
  • 如何在 Bash 中创建和使用数组

    Bash 是一种流行的命令行界面 常用于 Linux 和基于 Unix 的系统 Bash 的强大功能之一是能够使用数组 Bash 数组提供了一种在单个变量中存储多个值的方法 从而可以轻松访问和操作这些值 在本教程中 我们将探索如何在 Bas
  • 解决“laravel.log 无法打开”的问题:分步解决方案

    Laravel 是一个富有表现力且优雅的 PHP 框架 由于其语法和强大的功能而被广泛应用于 Web 应用程序开发 然而 与所有技术一样 它也并非没有挑战 许多开发人员遇到的一个常见错误是 laravel log 无法打开 错误 本文提供了
  • 如何在 Ubuntu 22.04 中创建 SFTP 用户(无 Shell 访问)

    SFTP 是一种允许通过网络安全传输文件的协议 它经常被企业和个人用来传输敏感数据 SFTP 与 FTP 类似 但使用不同的协议进行通信 SFTP 比 FTP 更安全 通常与 SSH Secure Shell 结合使用以提供更高级别的安全性