标签 SSH 下的文章

在你作为 Linux 系统管理员的职业生涯中,你可以使用 Secure Shell(SSH)远程访问 Linux 服务器或桌面系统。很有可能,你已经使用过了。在某些情况下,你会通过 SSH 一次性登录多个 Linux 服务器。实际上,SSH 很可能是 Linux 工具箱中最常用的工具之一。因此,你会希望操作尽可能高效。对于许多系统管理员来说,没有什么比命令行更有效的了。但是,有些用户确实更喜欢 GUI 工具,尤其是从一台桌面台式机远程连接到服务器上工作时。

如果你碰巧喜欢 GUI 工具,那么你肯定想了解一下 Linux 上的一些出色的 SSH 图形界面工具。将其与独特的终端窗口相结合,可以从同一窗口远程访问多台计算机,你便拥有了高效工作所需的一切。让我们看以下这三个工具,找出其中一个(或多个)是否完全适合你的需求。

我将在 Elementary OS 上演示这些工具,但是大多数流行的发行版都可以使用它们。

PuTTY

只要是久经沙场的人都知道 PuTTY。 实际上,PuTTY 是从 Windows 环境通过 SSH 连接到 Linux 服务器的事实标准工具。但是 PuTTY 不仅适用于 Windows。实际上,从其标准存储库中,PuTTY 也可以安装到 Linux 上。 PuTTY 的功能列表包括:

  • 保存会话
  • 通过 IP 地址或主机名链接
  • 定义备用 SSH 端口
  • 链接类型定义
  • 日志记录
  • 键盘、响铃、外观、连接等选项
  • 本地和远程隧道配置
  • 支持代理
  • 支持X11 隧道

PuTTY GUI 主要是一种保存 SSH 会话的方式,因此,你可以更轻松地管理那些你需要不断远程登录、登出的各种 Linux 服务器和桌面台式机。从 PuTTY 连接到 Linux 服务器后,你将拥有一个可以运行的终端窗口。此时,你可能会问自己,为什么不只在终端窗口中工作?对于某些人来说,保存会话的便捷性确实使 PuTTY 值得使用。

在 Linux 上安装 PuTTY 很简单。例如,你可以在基于 Debian 的发行版上执行命令:

sudo apt-get install -y putty

安装后,你可以从桌面菜单运行 PuTTY GUI 或执行命令 putty。在“ PuTTY 配置 PuTTY Configuration ” 窗口(图 1)中,在 “ 主机名(或 IP 地址) HostName (or IP address) ”位置键入主机名或 IP 地址,配置 端口 Port ”(如果不是默认值 22),从“ 连接类型 Connection type ”中选择 “SSH” ,然后单击“ 打开 Open ”。

 title=

图 1:PuTTY 连接配置窗口。

建立连接后,系统将提示你输入远程服务器上的用户凭据(图 2)。

 title=

图 2:使用 PuTTY 登录到远程服务器。

要保存会话(以便不必总是键入远程服务器信息),填写 IP 地址(或主机名),配置端口和连接类型,然后(在单击 “ 打开 Open ” 之前),在 “ 保存会话 Saved Sessions ” 顶部文本区域中键入链接的名称,然后单击 “ 保存 Save ”。 这样将保存此会话的配置。若要连接到已保存的会话,请从 “ 已保存的会话 Saved Sessions ” 窗口中选择它,单击 “ 加载 Load ”,然后单击 “ 打开 Open ”。 然后,系统将提示你输入远程服务器上的远程凭据登录远程服务器。

EasySSH

尽管 EasySSH 没有提供 PuTTY 中提供的大量配置选项,但是(顾名思义)它非常易于使用。 EasySSH 的最佳功能之一是提供标签式界面,因此你可以打开多个 SSH 连接并在它们之间快速切换。 EasySSH 的功能包括:

  • 分组(你可以将选项卡分组以获得更高效的体验)。
  • 保存用户名/密码。
  • 外观选项。
  • 支持本地和远程隧道。

在 Linux 桌面上安装 EasySSH 很简单,因为可以通过 flatpak 安装该应用程序(这意味着你必须在系统上安装 Flatpak )。 安装 flatpak 后,使用以下命令添加 EasySSH :

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak install flathub com.github.muriloventuroso.easyssh

使用以下命令运行 EasySSH :

flatpak run com.github.muriloventuroso.easyssh

你可以在其中单击左上角的 “+” 按钮打开 EasySSH 应用程序。 在出现的窗口(图 3)中,根据需要配置 SSH 连接。

 title=

图 3:在 EasySSH 中添加连接很简单。

添加连接后,它将显示在主窗口的左侧导航中(图 4)。

 title=

图 4:EasySSH 主窗口。

要在 EasySSH 中连接到远程服务器,请从左侧导航中选择它,然后单击 “ 连接 Connect ” 按钮(图 5)。

 title=

图 5:使用 EasySSH 连接到远程服务器。

EasySSH 的一个注意事项是你必须在连接配置中保存用户名和密码(否则连接将失败)。这意味着有权访问运行 EasySSH 的桌面的任何人都可以在不知道密码的情况下远程访问你的服务器。因此,你必须始终记得在外出时锁定桌面屏幕(并确保使用强密码)。你最不希望的就是避免服务器受到不必要的登录攻击。

Terminator

Terminator 实际上不是 SSH GUI。相反,Terminator 的功能是作为一个单一窗口,使你可以一次运行多个终端(甚至一组终端)。实际上,你可以打开 Terminator,将窗口垂直和水平拆分(直到拥有所需的所有终端),然后通过标准 SSH 命令连接到所有远程 Linux 服务器(图 6)。

 title=

图 6:Terminator 分为三个不同的窗口,每个窗口都连接到不同的 Linux 服务器。

要安装 Terminator,请执行以下命令:

sudo apt-get install -y terminator

安装后,从桌面菜单或用命令 terminator 打开该工具。打开窗口后,你可以在 Terminator 内部右键单击,然后选择 “ 水平分割 Split Horizontally ” 或 “ 垂直分割 Split Vertically ”。继续拆分终端,直到你打开所需的终端为止,然后开始远程管理这些服务器。使用 Terminator 的注意事项是它不是标准的 SSH GUI 工具,因为它不会保存你的会话或使你可以快速访问这些服务器。换句话说,你将始终必须手动登录到远程 Linux 服务器。但是,能够并行查看远程 Secure Shell 会话确实使管理多个远程计算机变得容易得多。

少而精的选择

Linux 没有多少可用的 SSH GUI 工具。为什么呢?因为大多数管理员更喜欢简单地打开终端窗口,并使用标准命令行工具来远程访问服务器。但是,如果需要 GUI 工具,则有两个可靠的选择,和一个使登录多台计算机稍微容易一些的终端。尽管对于那些寻找 SSH GUI 工具的人来说只有少数选择,但是可用的那些肯定值得你花时间,根据需要尝试其中之一。


via: https://www.linux.com/blog/learn/intro-to-linux/2018/11/three-ssh-guis-linux

作者:Jack Wallen 选题:lujun9972 译者:stevenzdg988 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 nccm 让你的终端连接 SSH 会话更快、更稳、更轻松。

OpenSSH 很常用,但没有一个知名的连接管理器,因此我开发了 ncurses SSH 连接管理器(nccm)来填补这个重要的空白。 nccm 是一个简单的 SSH 连接管理器,具有非常便于移植的终端界面(就如项目名称所示,使用 ncurses 编写)。最重要的是,它使用起来非常简单。有了 nccm,你可以花费最少的精力和最少的按键连接到你选择的 SSH 会话。

安装 nccm

最快的方式是从它的 Git 仓库克隆该项目:

$ git clone https://github.com/flyingrhinonz/nccm nccm.git

nccm.git/nccm 的文件夹中有两个文件:nccm 自身和 nccm.yml 配置文件。

首先将 nccm 脚本复制到系统目录 /usr/local/bin/ 中并添加执行权限,也可以通过使用install 命令来完成操作:

$ sudo install -m755 nccm –target-directory /usr/local/bin

文件 nccm.yml 可以拷贝到以下任意一个位置,默认从找到的第一个位置获取配置:

  • ~/.config/nccm/nccm.yml
  • ~/.nccm.yml
  • ~/nccm.yml
  • /etc/nccm.yml

nccm 需要在 Python 3 的环境中运行,这在大部分的 Linux 环境是没问题的。大多数 Python 库的依赖包已经作为 Python 3 的一部分存在,但是,有一些 YAML 的依赖包和实用程序是你必须安装的。

如果你没有安装 pip,你可以使用包管理器来安装它。在安装的同时,也请安装 yamllint 应用程序来帮助你验证 nccm.yml 文件。

在 Debian 或类似系统使用 apt 命令:

$ sudo apt install python3-pip yamllint

在 Fedora 或者类似系统使用 dnf 命令:

$ sudo dnf install python3-pip yamllint

PyYAML 也是必须安装的,可以通过使用 pip 来安装:

$ pip3 install --user PyYAML

使用 nccm

开始之前,需要修改 nccm.yml 文件来添加 SSH 连接配置,可以参照示例文件格式化 YAML 文件。仿照示例文件在开头添加连接名称,配置项使用两个空格缩进。不要忘了冒号(:),这是 YAML 的语言的格式。

不要担心你的 SSH 会话信息以何顺序排列,因为 nccm 在程序内提供了排序的方式。

如果修改完成,可以使用 yamllint 来校验配置:

$ yamllint ~/.config/nccm/nccm.yml

如果没有错误信息返回,说明文件的内容格式是正确的,可以进行下面的步骤。

如果 nccm 可以从你的路径中找到并且可以执行,那么输入 nccm 就可以启动 TUI(文本用户界面)了。如果你看到 Python 3 抛出的异常,请检查依赖包是否正确安装,任何异常都应该提到缺少的依赖包。

只要你没有在 YAML 配置文件中更改 ncm_config_control 模式,那么你可以使用以下的键盘按键来控制:

  • Up/Down 方向键 - 移动光标
  • Home/End - 跳转到文件开始和结尾
  • PgUp/PgDn - 以页为单位查看
  • Left/Right 方向键 - 水平滚动
  • TAB - 在文本框之间移动
  • 回车 - 连接选中的 SSH 会话
  • Ctrl-h - 显示帮助菜单
  • Ctrl-q/Ctrl-c - 退出
  • F1-F5! @ # $ % - 按 1-5 列排序

使用 F1F5 来按 1-5 列排序,如果你的设备占用了这些 F1 - F5 键,你可以使用! @ # $ % 来替代。默认界面显示 4 列内容,但我们将用户名和服务器地址作为单独的列来排序,这样我们就有了 5 个排序方式。你也可以通过再次按下排序的按键来逆转排序。在选中的行上按回车可以建立会话。

 title=

Filter 文本框中输入过滤内容,会用输入的内容以“与”的关系来过滤输出内容。这是不区分大小写的,而条目间用空白分隔。在 Conn 部分也是如此,但在这里按回车键可以连接到那个特定的条目编号。

这个工具还有许多功能需要你去发掘,比如专注模式,这些部分留下等待你去探索,也可以查看项目主页或者内置的帮助文档查看更多细节内容。

项目的 YAML 配置文件的文档是完善的,所以你可以查阅修改使 nccm 使用起来更加顺手。nccm 项目是非常希望得到你的反馈的,所以你可以复刻该项目然后添加更多新功能,欢迎大家提出拉取请求。

使用 nccm 来放松连接 SSH 的压力

像我一样,我希望这个工具可以对你有用,感谢能够为开源工作增加自己的贡献,请接受 nccm 作为我对开源项目自由、高效工作所做的贡献。


via: https://opensource.com/article/20/9/ssh-connection-manager

作者:Kenneth Aaron 选题:lujun9972 译者:hom 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

需要远程工作的看一下。使用这个有用的开源解决方案,从任何地方快速地连接和访问你的所有设备。

随着对连接和远程工作的需求的增长,访问远程计算资源变得越来越重要。但是,提供对设备和硬件的外部访问的要求使此任务变得复杂而有风险。旨在减少此类麻烦的 ShellHub 是一个云服务器,允许从任何外部网络常规访问这些设备。

ShellHub 是一个 Apache 2.0 许可的开源解决方案,它可满足所有这些需求,并允许用户通过一个帐户连接和管理多个设备。它的开发是为了方便开发者和程序员的工作,使得任何硬件架构的 Linux 设备的远程访问成为可能。

仔细观察,ShellHub 方案使用 HTTP 传输层来封装 SSH 协议。这种传输层的选择可以在大多数网络上无缝使用,因为大多数公司的防火墙规则和策略通常都可以使用并接受它。

下面这些示例使用 2020 年 6 月 10 日发布的 ShellHub 版本 0.3.2。

使用 ShellHub

要访问该平台,只需进入 shellhub.io 并注册一个自己的帐户。你的注册数据将帮助开发团队了解用户资料并提供有关如何改进平台的更多信息。

图 1:shellhub.io 中的注册表格

ShellHub 有直观、简洁的界面,这让所有的信息和功能都能以最快的方式呈现。注册后,你会看到一块仪表板,这时可以注册你的第一台设备。

添加设备

要启用通过 ShellHub 连接设备,你需要生成一个标识符,它用于在设备连接到服务器时对你的设备进行身份验证。

此标识必须配置在代理(ShellHub 客户端)内部,该代理必须与镜像一起保存在设备中,或者必须添加为 Docker 容器。

ShellHub 默认使用 Docker 运行代理,这非常方便,因为它在现有系统上提供了一种无痛的添加方式,支持 Docker 是唯一的要求。要添加设备,你需要粘贴命令行,它显示在 ShellHub Cloud 的对话框中(请参见图 2)。

图 2:将设备添加到 ShellHub Cloud

设备默认使用它的 MAC 地址作为其主机名。在内部,该设备由其密钥标识,这是在设备注册期间生成的,用于与服务器进行身份验证。

访问设备

要访问你的设备,只需进入仪表板中的“查看所有设备”,或单击左侧菜单上的“设备”。这将列出你所有已注册的设备。

设备状态可在页面上轻松看到。在线设备旁边会显示一个绿色图标,可以单击终端图标进行连接。你接着输入密码,最后单击”连接“按钮,请参见(图 3)。

图 3:使用网络上的终端访问设备

另一种访问设备的方法是从类似 PuTTYTermius 之类的 SSH 客户端,甚至 Linux 终端访问。我们可以使用称为 SSHID 的 ShellHub 标识作为连接的目的地址(例如 ssh username@SSHID)。图 4 说明了如何使用在终端中使用 Linux SSH 客户端连接到我们的计算机。

图 4:使用 Linux 终端连接到设备

无论你何时登录 ShellHub Cloud 平台,你都可以访问仪表板上的所有已注册设备,这样你可以随时随地访问它们。ShellHub 通过一个开源平台,以透明的方式为您与远程机器保持通信安全的过程增加了简单性。

GitHub 上加入 ShellHub 社区,或随时通过 Gitter 或通过电子邮件 [email protected] 向开发团队发送你的建议或反馈。我们很乐意收到社区成员的贡献!


via: https://opensource.com/article/20/7/linux-shellhub

作者:Domarys 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

有时你无法从本地连接到 SSH 服务器。还有时,你可能想为 SSH 连接添加额外的安全层。在这些情况下,通过代理服务器连接到 SSH 服务器是一种解决方式。

Squid 是提供缓存和代理服务的全功能代理服务器应用。它通常用于在浏览过程中重用和缓存以前请求的网页来帮助缩短响应时间并减少网络带宽。

但是在本篇中,你将配置 Squid 作为 SSH 代理服务器,因为它是强大的受信任代理服务器,易于配置。

安装和配置

使用 sudo 安装 squid 软件包:

$ sudo dnf install squid -y

squid 配置文件非常庞大,但是我们只需要配置其中一些。Squid 使用访问控制列表来管理连接。

编辑 /etc/squid/squid.conf 文件,确保你有下面解释的两行。

首先,指定你的本地 IP 网络。默认配置文件已经列出了最常用的,但是如果没有,你需要添加你的配置。例如,如果你的本地 IP 网络范围是 192.168.1.X,那么这行会是这样:

acl localnet src 192.168.1.0/24

接下来,添加以下行,将 SSH 端口添加为安全端口:

acl Safe_ports port 22

保存该文件。现在启用并重启 squid 代理服务:

$ sudo systemctl enable squid
$ sudo systemctl restart squid

squid 代理默认监听 3128 端口。配置 firewalld 允许此服务:

$ sudo firewall-cmd --add-service=squid --perm
$ sudo firewall-cmd --reload

测试 ssh 代理连接

要通过 ssh 代理服务器连接到服务器,我们将使用 netcat

如果尚未安装 nmap-ncat,请安装它:

$ sudo dnf install nmap-ncat -y

这是标准 ssh 连接示例:

$ ssh [email protected]

这是使用 squid 代理服务器作为网关连接到该服务器的方式。

此示例假定 squid 代理服务器的 IP 地址为 192.168.1.63。你还可以使用 squid 代理服务器的主机名或 FQDN:

$ ssh [email protected] -o "ProxyCommand nc --proxy 192.168.1.63:3128 %h %p"

以下是这些选项的含义:

  • ProxyCommand – 告诉 ssh 使用代理命令。
  • nc – 用于建立与代理服务器连接的命令。这是 netcat 命令。
  • %h – 代理服务器的主机名或 IP 地址的占位符。
  • %p – 代理服务器端口号的占位符。

有很多方法可以配置 SSH 代理服务器,但这是入门​​的简单方法。


via: https://fedoramagazine.org/configure-ssh-proxy-server/

作者:Curt Warfield 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过 SSH 连接远程 Linux 系统很简单。下面是教程。

树莓派是一个有用且价格低廉的家庭服务器,可用于很多事情。我的树莓派最常用来做打印服务器,可以在我的家庭网络中共享激光打印机,或作为个人文件服务器保存项目副本和其他数据。

我的文件服务器有很多用途。假设说我现在有一个项目,比如一本新书,我想把我的工作和所有相关的文件都复制一份快照。这种场景下,我只需要把 BookProject 文件夹复制到文件服务器的 BookBackup 文件夹。

或者我现在正在清理我的本地文件时,发现一些我不需要的文件,但是我不确定是否要删除,我会把它们复制到文件服务器的 KeepForLater 文件夹。这是我日常 Linux 系统中清除杂乱的文件,并将不常用的文件卸载到个人文件服务器上的方便方法。

用树莓派或其他 Linux 系统搭建个人文件服务器不需要配置 NFS( 网络文件系统 Network File System >)或 CIFS( 通用互联网文件系统 Common Internet File System )或改造其他的文件共享系统如 WebDAV。你可以很轻松的使用 SSH 来搭建远程文件服务器。下面是教程。

在远程服务器上配置 SSHD

你的 Linux 系统可能已经安装了 SSH 守护进程(sshd),甚至它已经默认运行了。如果没有,你可以使用你 Linux 发行版本上的任何控制面板来轻松配置 SSH。我在树莓派上运行了 Fedora ARM,通过 Web 浏览器访问树莓派的 9090 端口,我可以远程访问控制面板。(在我的家庭网络中,树莓派的 IP 地址是 10.0.0.11,因此我连接的是 10.0.0.11:9090。)如果 SSH 守护进程没有默认运行,你可以在控制面板的“服务”里把它设置为开机启动。

 title=

你可以在系统服务列表里找到 sshd

 title=

如果 sshd 没有开启,点击切换按钮打开它。

你有账号吗?

你需要有个远程系统的账号。它可以与你本地系统的账号相同,也可以不同。

在流行的 Raspbian 发行版本上,默认的账号名是 pi。但是其他的 Linux 发行版本可能需要你在安装系统时就设置一个唯一的新用户。如果你不知道你的用户名,你可以用系统的控制面板创建一个。在我的树莓派上,我创建了一个 jhall 账号,与我日常用的 Linux 桌面机器的用户名相同。

 title=

如果你用的是 Fedora 服务器,你可以点击“创建新账号”按钮。

 title=

不要忘记设置密码或添加公钥。

可选:添加公钥

如果你把公钥添加到远程 Linux 系统上,你就可以不使用密码登录。这一步是可选的;如果你愿意,你仍可以用密码登录。

你可以在下面的文章中学到更多关于 SSH 密钥的信息:

创建文件管理器的快捷方式

现在你已经在远程系统上启动 SSH 守护进程了,也设置了用户名和密码,最后一步就是在你本地的文件管理器中创建一个快捷方式,地址映射到远程 Linux 系统。我的桌面是 GNOME,但是在其他的 Linux 桌面上的基本操作步骤都是一样的。

建立初始连接

在 GNOME 的文件管理器中,在左边导航栏找到 “+其它位置” 按钮。点击它会出现一个 “连接到服务器” 提示框。在框中输入远程 Linux 服务器的地址,地址以 SSH 连接协议开头。

 title=

GNOME 文件管理器支持多种连接协议。要通过 SSH 进行连接,服务器地址请以 sftp://ssh:// 开头。

如果你远程 Linux 系统的用户名与本地的相同,那么你只需要输入服务器的地址和文件夹路径就可以了。比如要连接到我的树莓派的 /home/jhall 目录,我输入:

sftp://10.0.0.11/home/jhall

 title=

如果你远程 Linux 系统的用户名与本地的不同,你可以在远程系统地址前加 @ 符号来指定远程系统的用户名。要连接到远程的 Raspbian 系统,你可能要输入:

sftp://[email protected]/home/pi

 title=

如果你没有把公钥添加到远程服务器,那么你需要输入密码。如果你已经添加,GNOME 文件管理器应该会自动打开远程系统上的文件夹来让你跳转到不同的目录。

 title=

创建一个快捷方式,之后就可以轻松连接服务器

在 GNOME 文件管理器中,这很简单。右击导航栏中远程系统的名字,选择“添加书签”。这一步操作就创建了连接到远程路径的快捷方式。

 title=

如果你想把标签中的快捷方式改成一个更容易记的名字,你可以右击快捷方式选择“重命名”。

总结

通过 SSH 连接到远程 Linux 系统是很简单的事。你可以用相同的方式连接到家庭文件服务器以外的其他系统。我还创建了一个能让我立即访问我的提供商 Web 服务器上的文件的快捷方式,和另一个能迅速打开我的项目服务器的文件夹的快捷方式。SSH 使它成为一个安全的连接;所有的传输都是加密的。当我通过 SSH 打开远程的文件时,我可以像在本地操作一样使用 GNOME 文件管理器轻松打开远程文件。


via: https://opensource.com/article/20/3/personal-file-server-ssh

作者:Jim Hall 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

SFTP 意思是“ 安全文件传输协议 Secure File Transfer Protocol ” 或 “ SSH 文件传输协议 SSH File Transfer Protocol ”,它是最常用的用于通过 ssh 将文件从本地系统安全地传输到远程服务器的方法,反之亦然。sftp 的主要优点是,除 openssh-server 之外,我们不需要安装任何额外的软件包,在大多数的 Linux 发行版中,openssh-server 软件包是默认安装的一部分。sftp 的另外一个好处是,我们可以允许用户使用 sftp ,而不允许使用 ssh

当前发布的 Debian 10 代号为 ‘Buster’,在这篇文章中,我们将演示如何在 Debian 10 系统中在 “监狱式的” Chroot 环境中配置 sftp。在这里,Chroot 监狱式环境意味着,用户不能超出各自的家目录,或者用户不能从各自的家目录更改目录。下面实验的详细情况:

  • OS = Debian 10
  • IP 地址 = 192.168.56.151

让我们跳转到 SFTP 配置步骤,

步骤 1、使用 groupadd 命令给 sftp 创建一个组

打开终端,使用下面的 groupadd 命令创建一个名为的 sftp_users 组:

root@linuxtechi:~# groupadd sftp_users

步骤 2、添加用户到组 sftp\_users 并设置权限

假设你想创建新的用户,并且想添加该用户到 sftp_users 组中,那么运行下面的命令,

语法:

#  useradd -m -G sftp_users <用户名>

让我们假设用户名是 jonathan

root@linuxtechi:~# useradd -m -G sftp_users jonathan

使用下面的 chpasswd 命令设置密码:

root@linuxtechi:~# echo "jonathan:<输入密码>" | chpasswd

假设你想添加现有的用户到 sftp_users 组中,那么运行下面的 usermod 命令,让我们假设已经存在的用户名称是 chris

root@linuxtechi:~# usermod -G sftp_users chris

现在设置用户所需的权限:

root@linuxtechi:~# chown root /home/jonathan /home/chris/

在各用户的家目录中都创建一个上传目录,并设置正确地所有权:

root@linuxtechi:~# mkdir /home/jonathan/upload
root@linuxtechi:~# mkdir /home/chris/upload
root@linuxtechi:~# chown jonathan /home/jonathan/upload
root@linuxtechi:~# chown chris /home/chris/upload

注意: 像 Jonathan 和 Chris 之类的用户可以从他们的本地系统上传文件和目录。

步骤 3、编辑 sftp 配置文件 /etc/ssh/sshd\_config

正如我们已经陈述的,sftp 操作是通过 ssh 完成的,所以它的配置文件是 /etc/ssh/sshd_config,在做任何更改前,我建议首先备份文件,然后再编辑该文件,接下来添加下面的内容:

root@linuxtechi:~# cp /etc/ssh/sshd_config /etc/ssh/sshd_config-org
root@linuxtechi:~# vim /etc/ssh/sshd_config
......
#Subsystem      sftp    /usr/lib/openssh/sftp-server
Subsystem       sftp    internal-sftp

Match Group sftp_users
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory %h
  ForceCommand internal-sftp
......

保存并退出文件。

为使上述更改生效,使用下面的 systemctl 命令来重新启动 ssh 服务:

root@linuxtechi:~# systemctl restart sshd

在上面的 sshd_config 文件中,我们已经注释掉了以 Subsystem 开头的行,并添加了新的条目 Subsystem sftp internal-sftp 和新的行。而

Match Group sftp_users –> 它意味着如果用户是 sftp_users 组中的一员,那么将应用下面提到的规则到这个条目。

ChrootDierctory %h –> 它意味着用户只能在他们自己各自的家目录中更改目录,而不能超出他们各自的家目录。或者换句话说,我们可以说用户是不允许更改目录的。他们将在他们的目录中获得监狱一样的环境,并且不能访问其他用户的目录和系统的目录。

ForceCommand internal-sftp –> 它意味着用户仅被限制到只能使用 sftp 命令。

步骤 4、测试和验证 sftp

登录到你的 sftp 服务器的同一个网络上的任何其它的 Linux 系统,然后通过我们放入 sftp_users 组中的用户来尝试 ssh 和 sftp 服务。

[root@linuxtechi ~]# ssh root@linuxtechi
root@linuxtechi's password:
Write failed: Broken pipe
[root@linuxtechi ~]# ssh root@linuxtechi
root@linuxtechi's password:
Write failed: Broken pipe
[root@linuxtechi ~]#

以上操作证实用户不允许 ssh ,现在使用下面的命令尝试 sftp

[root@linuxtechi ~]# sftp root@linuxtechi
root@linuxtechi's password:
Connected to 192.168.56.151.
sftp> ls -l
drwxr-xr-x    2 root     1001         4096 Sep 14 07:52 debian10-pkgs
-rw-r--r--    1 root     1001          155 Sep 14 07:52 devops-actions.txt
drwxr-xr-x    2 1001     1002         4096 Sep 14 08:29 upload

让我们使用 sftp 的 get 命令来尝试下载一个文件:

sftp> get devops-actions.txt
Fetching /devops-actions.txt to devops-actions.txt
/devops-actions.txt                                                                               100%  155     0.2KB/s   00:00
sftp>
sftp> cd /etc
Couldn't stat remote file: No such file or directory
sftp> cd /root
Couldn't stat remote file: No such file or directory
sftp>

上面的输出证实我们能从我们的 sftp 服务器下载文件到本地机器,除此之外,我们也必须测试用户不能更改目录。

让我们在 upload 目录下尝试上传一个文件:

sftp> cd upload/
sftp> put metricbeat-7.3.1-amd64.deb
Uploading metricbeat-7.3.1-amd64.deb to /upload/metricbeat-7.3.1-amd64.deb
metricbeat-7.3.1-amd64.deb                                                                        100%   38MB  38.4MB/s   00:01
sftp> ls -l
-rw-r--r--    1 1001     1002     40275654 Sep 14 09:18 metricbeat-7.3.1-amd64.deb
sftp>

这证实我们已经成功地从我们的本地系统上传一个文件到 sftp 服务中。

现在使用 winscp 工具来测试 sftp 服务,输入 sftp 服务器 IP 地址和用户的凭证:

在 “Login” 上单击,然后尝试下载和上传文件:

现在,在 upload 文件夹中尝试上传文件:

上面的窗口证实上传是完好地工作的,这就是这篇文章的全部。如果这些步骤能帮助你在 Debian 10 中使用 chroot 环境配置 SFTP 服务器s,那么请分享你的反馈和评论。


via: https://www.linuxtechi.com/configure-sftp-chroot-debian10/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出