[排错] 解决 SFTP 登录时报错 “client_loop: send disconnect: Broken pipe ……”

报错代码

client_loop: send disconnect: Broken pipe
Connection closed.  
Connection closed

分析

SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错

解决方法

步骤一:将 SFTP 目录的所属主设置为 root

# chown root: <sftp directory>

步骤二:将 SFTP 目录的权限设置为 755

# chmod 755 <sftp directory>

[内容] SFTP 的配置案例

案例一:将 SFTP 用户的家目录作为 SFTP 用户的 SFTP 目录,让 SFTP 用户通过 SFTP 登录时被限制在自己的家目录里,并使用 2200 端口

# vim /etc/ssh/sshd_config

将以下内容:

......
Subsystem       sftp ......
......

修改为:

......
# Subsystem       sftp ......
......

并添加以下内容:

......
Subsystem       sftp    internal-sftp
Match LocalPort 2200
  ForceCommand internal-sftp
  PasswordAuthentication yes
  ChrootDirectory %h
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

(补充:这里以将 /etc/ssh/sshd_config 最为 SFTP 的配置文件为例)

(注意:SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错)

案例二:将根目录下以和 SFTP 用户名同名的目录作为此 SFTP 用户的 SFTP 目录,让此 SFTP 用户通过 SFTP 登录时被限制在根目录下以和自己用户名同名的目录里,但是此设置只适用于组是 sftpuser 的用户

# vim /etc/ssh/sshd_config

将以下内容:

......
Subsystem       sftp ......
......

修改为:

......
# Subsystem       sftp ......
......

并添加以下内容:

......
Subsystem       sftp    internal-sftp
Match Group sftpuser
  ForceCommand internal-sftp
  PasswordAuthentication yes
  ChrootDirectory /%u
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

(补充:这里以将 /etc/ssh/sshd_config 最为 SFTP 的配置文件为例)

(注意:SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错)

案例三:将根目录下以和 SFTP 用户名同名的目录作为此 SFTP 用户的 SFTP 目录,让此 SFTP 用户通过 SFTP 登录时被限制在根目录下以和自己用户名同名的目录里,但是此设置只适用于用户 sftpuser

# vim /etc/ssh/sshd_config

将以下内容:

......
Subsystem       sftp ......
......

修改为:

......
# Subsystem       sftp ......
......

并添加以下内容:

......
Subsystem       sftp    internal-sftp
Match User sftpuser
  ForceCommand internal-sftp
  PasswordAuthentication yes
  ChrootDirectory /%u
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

(补充:这里以将 /etc/ssh/sshd_config 最为 SFTP 的配置文件为例)

(注意:SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错)

[内容] Linux 常用软件

bash-completion

作用:用于使用 tab 键补全命令

安装方法:

# yum install bash-completion

或者:

# dnf install bash-completion

redhat-lsb-core

作用:可以在 CentOS Linux & RHEL 上显示系统版本信息

安装方法:

# yum install redhat-lsb-core

或者:

# dnf install redhat-lsb-core

lsb-release

作用:可以在 openSUSE & SLE 上显示系统版本信息

安装方法:

# zypper install lsb-release

vim-enhanced

作用:可以使用 vim 命令编辑文档

安装方法:

# yum install vim-enhanced

或者:

# dnf install vim-enhanced

xorg-x11-xauth.x86_64 和 xorg-x11-fonts-*

作用:让需要图形化环境的软件可以启动

安装方法:

# yum install xorg-x11-xauth.x86_64; yum install xorg-x11-fonts-*

或者:

# dnf install xorg-x11-xauth.x86_64; dnf install xorg-x11-fonts-*

Linux 启动顺序

第一步启动:BIOS/UEFI

BIOS (Basic Input Output System) 即基本输入输出系统。

UEFI (Unified Extensible Firmware Interface) 即可扩展固件接口。

它们的主要作用是为计算机提供直接、底层的硬件控制和设置。UEFT 是 BIOS 的升级替代方案。

第二步启动:MBR/GPT

MBR (Master Boot Record) 即主引导记录。MBR 通常和 BIOS 搭配,最大分区容量不能超过 2T,最多可以有 3 个主分区,1 个扩展分区,不过扩展分区里可以有多个逻辑分区。

GPT (GUID Partition Table) 即全局唯一标识分区表。GPT 通常和 UEFI 搭配。

它们都是读取硬盘时最先读取的分区,里面有各自的启动代码。

第三步启动:GRUB2

GRUB2 (GRand Unified Bootloader version 2) 即多操作系统启动程序,可以选择系统分区上不同的系统内核,同时也可以向启动的内核传递参数。

第四步启动:initrd/Kernel

initrd (init ramdisk) 即初始化内存盘,作用是:1. 提供开机必备的单 kernel 文件 (vmlinuz) 没有提供的驱动模块。2. 通过引导加载程序加载内存,将内存视为临时根目录,从中运行程序,之后再将根目录转移到硬盘上真正的根目录上。

第五步启动:systemdprocess

systemdprocess,即启动各类程序和进程。