如何通过这篇文章轻松实现CentOS系统SFTP无密码安全登录?
- 内容介绍
- 文章标签
- 相关推荐
一、痛点剖析——为什么你需要 SFTP 无密码登录?老实说,
在日常运维和业务交付中。常见的困扰包括:
- 🔐 频繁输入密码每次手动登录或脚本执行都要输入 SSH 密码,效率低下。
- ⚠️ 密码泄露风险密码在脚本、日志或团队协作中容易被泄露,导致安全隐患。
- 🤖 自动化受阻CI/CD、备份或批量文件同步等场景必须依赖交互式登录,难以实现全自动化。
- 🛡️ 审计与合规要求公司要求使用密钥认证,并限制普通使用者的 SSH 登录权限。
使用基于 SSH 的密钥对实现 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
# 将本机公钥复制到服务端使用者
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 专用账号:
- SFTP 专用账号:
一、痛点剖析——为什么你需要 SFTP 无密码登录?老实说,
在日常运维和业务交付中。常见的困扰包括:
- 🔐 频繁输入密码每次手动登录或脚本执行都要输入 SSH 密码,效率低下。
- ⚠️ 密码泄露风险密码在脚本、日志或团队协作中容易被泄露,导致安全隐患。
- 🤖 自动化受阻CI/CD、备份或批量文件同步等场景必须依赖交互式登录,难以实现全自动化。
- 🛡️ 审计与合规要求公司要求使用密钥认证,并限制普通使用者的 SSH 登录权限。
使用基于 SSH 的密钥对实现 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
# 将本机公钥复制到服务端使用者
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 专用账号:
- SFTP 专用账号:

