温馨提示×

centos sftp 乱码怎么解决

小樊
46
2026-09-02 22:53:20
栏目: 智能运维

在 CentOS 上使用 SFTP 出现乱码,通常是字符编码不一致导致的(服务端/客户端编码不同,常见于中文文件名)。下面按常见场景给出解决方案。


一、确认系统编码(最常见原因)

1. 查看当前编码

locale
echo $LANG

如果看到:

LANG=
LC_CTYPE="POSIX"

或不是 UTF-8,就很可能乱码。

2. 设置为 UTF-8(推荐)

localectl set-locale LANG=zh_CN.UTF-8

或临时:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

如果没有 zh_CN.UTF-8

localedef -i zh_CN -f UTF-8 zh_CN.UTF-8

二、SFTP 客户端导致的乱码

1. Windows 客户端(FileZilla / WinSCP)

  • FileZilla
    • 站点管理 → 字符集 → 强制 UTF-8
  • WinSCP
    • 高级 → 环境 → 文件名 UTF-8 → 开启

2. Linux 本地 sftp 命令

确保终端是 UTF-8:

echo $LANG

终端(如 SecureCRT、Xshell)也要设置 UTF-8。


三、SSH / SFTP 服务端配置

编辑:

vi /etc/ssh/sshd_config

确保有以下内容:

AcceptEnv LANG LC_*

然后:

systemctl restart sshd

四、vsftpd / proftpd(如果走 FTP 而非 SFTP)

注意:SFTP ≠ FTP

如果是 vsftpd:

vi /etc/vsftpd/vsftpd.conf

添加:

utf8_filesystem=YES

五、已经乱码的文件名怎么处理?

1. 查看真实编码

file 文件名

2. 重命名(convmv)

yum install convmv -y
convmv -f GBK -t UTF-8 --notest 文件名

六、最简排查清单 ✅

  1. 服务端 LANG=zh_CN.UTF-8
  2. SSH 支持 AcceptEnv LANG
  3. 客户端强制 UTF-8
  4. 终端编码 UTF-8

如果你能告诉我:

  • 用的是 SFTP 命令 / FileZilla / WinSCP
  • 文件名乱码 还是 文件内容乱码
  • CentOS 版本(cat /etc/redhat-release

我可以给你更精确的方案。

0