如何通过这篇文章轻松实现CentOS系统SFTP无密码安全登录?

更新于
2026-08-12 12:21:17
7阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

一、痛点剖析——为什么你需要 SFTP 无密码登录?老实说,

在日常运维和业务交付中。常见的困扰包括:

  • 🔐 频繁输入密码每次手动登录或脚本执行都要输入 SSH 密码,效率低下。
  • ⚠️ 密码泄露风险密码在脚本、日志或团队协作中容易被泄露,导致安全隐患。
  • 🤖 自动化受阻CI/CD、备份或批量文件同步等场景必须依赖交互式登录,难以实现全自动化。
  • 🛡️ 审计与合规要求公司要求使用密钥认证,并限制普通使用者的 SSH 登录权限。

使用基于 SSH 的密钥对实现 SFTP 无密码登录。既能消除上述痛点,又能提高传输安全性和运维效率。

如何通过这篇文章轻松实现CentOS系统SFTP无密码安全登录?

二、环境准备

1. 两台 CentOS 主机

假设有两台机器:

  • 192.168.1.100
  • 192.168.1.101

2. 确认已安装并启动 OpenSSH 服务

# 检查 sshd 状态
systemctl status sshd
# 如未启动则启动
sudo systemctl start sshd
sudo systemctl enable sshd

3. 安装可选的 SFTP 子程序

CentOS 7 默认已包含 sftp-server如果需要额外的 FTP 服务。可自行安装:

# yum install -y vsftpd # 如需使用 FTP,请自行配置

三、防火墙放通 SSH/SFTP 端口

a) firewalld 场景

# 永久放通 SSH 服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

b) iptables 场景

# 添加 ACCEPT 规则并保存
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
service iptables save # 根据程序版本可能不同
sudo systemctl restart iptables

四、生成 SSH 密钥对

如果已有密钥可以跳过此步。推荐使用 RSA 4096 位或 Ed25519。

# 生成 RSA 密钥对,默认存放在 ~/.ssh/
ssh-keygen -t rsa -b 4096 -C "sftp_key_$"
# 按两次回车即可

生成后会得到两个文件:

  • ~/.ssh/id_rsa: 私钥
  • ~/.ssh/id_rsa.pub: 公钥

五、公钥分发到服务器端

使用 ssh-copy-id 自动将公钥追加到服务器的 .ssh/authorized_keys

如何通过这篇文章轻松实现CentOS系统SFTP无密码安全登录?
# 将本机公钥复制到服务端使用者
ssh-copy-id -i ~/.ssh/id_rsa.pub your_username@192.168.1.100
# 若没有 ssh-copy-id,可手动操作:
cat ~/.ssh/id_rsa.pub | ssh your_username@192.168.1.100 "mkdir -p ~/.ssh && cat>> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

六、sshd_config 精细化配置——只允许 SFTP,无交互式 Shell 登录

a) 基础设置

# /etc/ssh/sshd_config
PubkeyAuntication yes
AuthorizedKeysFile .ssh/authorized_keys
Subsystem sftp /usr/libexec/openssh/sftp-server
# 若程序方法不同,请自行确认

b) 创建专用 SFTP 使用者组和使用者

# 创建组。仅用于 SFTP
sudo groupadd sftpusers
# 创建使用者并限制其只能使用 SFTP
sudo useradd -g sftpusers -s /sbin/nologin -m sftp_user
# 为该使用者设置密码
echo "sftp_user:StrongPass123" | sudo chpasswd

C) Chroot 限制目录

假设我们希望将使用者根目录锁定在 /data/sftp/sftp_user

# 创建目录结构并设置所有权为 root:sftpusers,权限为 750
sudo mkdir -p /data/sftp/sftp_user/upload
sudo chown root:sftpusers /data/sftp/sftp_user
sudo chmod 750 /data/sftp/sftp_user
# 为实际写入目录赋予使用者所有权
sudo chown sftp_user:sftpusers /data/sftp/sftp_user/upload
# 在 sshd_config 中追加以下块:
Match Group sftpusers
ChrootDirectory /data/sftp/%u # %u 为使用者名变量,即 /data/sftp/sftp_user
ForceCommand internal-sftp # 强制使用内部 SFTP 子程序
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no
PasswordAuntication no # 禁止密码登录,只保留密钥认证
# 保存后重启 SSH 服务以生效配置:
sudo systemctl restart sshd

七、测试无密码 SFTP 登录

# 从客户端直接连接
sftp sftp_user@192.168.1.100
# 或者使用 scp 拉取文件示例:
scp sftp_user@192.168.1.100:/upload/example.txt ./local_dir/

If connection succeeds without a password prompt,configuration is successful.

八、注意事项与常用方法 ✅

  • 私钥保密:`~/.ssh/id_rsa` 必须严格控制访问权限,建议设置为 `chmod 600`。
  • SFTP 专用账号:

标签:CentOS

一、痛点剖析——为什么你需要 SFTP 无密码登录?老实说,

在日常运维和业务交付中。常见的困扰包括:

  • 🔐 频繁输入密码每次手动登录或脚本执行都要输入 SSH 密码,效率低下。
  • ⚠️ 密码泄露风险密码在脚本、日志或团队协作中容易被泄露,导致安全隐患。
  • 🤖 自动化受阻CI/CD、备份或批量文件同步等场景必须依赖交互式登录,难以实现全自动化。
  • 🛡️ 审计与合规要求公司要求使用密钥认证,并限制普通使用者的 SSH 登录权限。

使用基于 SSH 的密钥对实现 SFTP 无密码登录。既能消除上述痛点,又能提高传输安全性和运维效率。

如何通过这篇文章轻松实现CentOS系统SFTP无密码安全登录?

二、环境准备

1. 两台 CentOS 主机

假设有两台机器:

  • 192.168.1.100
  • 192.168.1.101

2. 确认已安装并启动 OpenSSH 服务

# 检查 sshd 状态
systemctl status sshd
# 如未启动则启动
sudo systemctl start sshd
sudo systemctl enable sshd

3. 安装可选的 SFTP 子程序

CentOS 7 默认已包含 sftp-server如果需要额外的 FTP 服务。可自行安装:

# yum install -y vsftpd # 如需使用 FTP,请自行配置

三、防火墙放通 SSH/SFTP 端口

a) firewalld 场景

# 永久放通 SSH 服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

b) iptables 场景

# 添加 ACCEPT 规则并保存
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
service iptables save # 根据程序版本可能不同
sudo systemctl restart iptables

四、生成 SSH 密钥对

如果已有密钥可以跳过此步。推荐使用 RSA 4096 位或 Ed25519。

# 生成 RSA 密钥对,默认存放在 ~/.ssh/
ssh-keygen -t rsa -b 4096 -C "sftp_key_$"
# 按两次回车即可

生成后会得到两个文件:

  • ~/.ssh/id_rsa: 私钥
  • ~/.ssh/id_rsa.pub: 公钥

五、公钥分发到服务器端

使用 ssh-copy-id 自动将公钥追加到服务器的 .ssh/authorized_keys

如何通过这篇文章轻松实现CentOS系统SFTP无密码安全登录?
# 将本机公钥复制到服务端使用者
ssh-copy-id -i ~/.ssh/id_rsa.pub your_username@192.168.1.100
# 若没有 ssh-copy-id,可手动操作:
cat ~/.ssh/id_rsa.pub | ssh your_username@192.168.1.100 "mkdir -p ~/.ssh && cat>> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

六、sshd_config 精细化配置——只允许 SFTP,无交互式 Shell 登录

a) 基础设置

# /etc/ssh/sshd_config
PubkeyAuntication yes
AuthorizedKeysFile .ssh/authorized_keys
Subsystem sftp /usr/libexec/openssh/sftp-server
# 若程序方法不同,请自行确认

b) 创建专用 SFTP 使用者组和使用者

# 创建组。仅用于 SFTP
sudo groupadd sftpusers
# 创建使用者并限制其只能使用 SFTP
sudo useradd -g sftpusers -s /sbin/nologin -m sftp_user
# 为该使用者设置密码
echo "sftp_user:StrongPass123" | sudo chpasswd

C) Chroot 限制目录

假设我们希望将使用者根目录锁定在 /data/sftp/sftp_user

# 创建目录结构并设置所有权为 root:sftpusers,权限为 750
sudo mkdir -p /data/sftp/sftp_user/upload
sudo chown root:sftpusers /data/sftp/sftp_user
sudo chmod 750 /data/sftp/sftp_user
# 为实际写入目录赋予使用者所有权
sudo chown sftp_user:sftpusers /data/sftp/sftp_user/upload
# 在 sshd_config 中追加以下块:
Match Group sftpusers
ChrootDirectory /data/sftp/%u # %u 为使用者名变量,即 /data/sftp/sftp_user
ForceCommand internal-sftp # 强制使用内部 SFTP 子程序
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no
PasswordAuntication no # 禁止密码登录,只保留密钥认证
# 保存后重启 SSH 服务以生效配置:
sudo systemctl restart sshd

七、测试无密码 SFTP 登录

# 从客户端直接连接
sftp sftp_user@192.168.1.100
# 或者使用 scp 拉取文件示例:
scp sftp_user@192.168.1.100:/upload/example.txt ./local_dir/

If connection succeeds without a password prompt,configuration is successful.

八、注意事项与常用方法 ✅

  • 私钥保密:`~/.ssh/id_rsa` 必须严格控制访问权限,建议设置为 `chmod 600`。
  • SFTP 专用账号:

标签:CentOS