在 SFTP 中切换 Linux 用户,要分几种常见场景来说,因为 SFTP 本身不支持像 su 那样直接切换用户。
如果你只是想用另一个用户身份使用 SFTP:
sftp user2@hostname
或指定端口:
sftp -P 22 user2@hostname
✅ 前提条件
如果你当前已经 SSH 登录到服务器:
ssh user1@hostname
然后切换用户:
su - user2
⚠️ 注意
su 后不一定能再启动 SFTP(因为不是交互式登录)如果你有 sudo 权限:
sudo -u user2 sftp user2@localhost
或:
sudo su - user2
sftp localhost
⚠️ 这种方式通常用于本地测试,不推荐生产环境。
su - user2
mkdir -p ~/.ssh
chmod 700 ~/.ssh
把你的 公钥 加入:
echo "ssh-rsa AAAA..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sftp -i ~/.ssh/id_rsa user2@hostname
✅ 适合自动化 / 脚本 / CI
如果服务器配置了 SFTP Chroot(/usr/lib/openssh/sftp-server):
Subsystem sftp internal-sftp
Match User user2
ChrootDirectory /data/sftp/user2
ForceCommand internal-sftp
| 错误理解 | 说明 |
|---|---|
SFTP 里执行 su |
❌ SFTP 不是 shell |
| SFTP 登录后切换用户 | ❌ 不支持 |
| 一个 SFTP 会话多个用户 | ❌ 不可能 |
| 需求 | 推荐方式 |
|---|---|
| 临时用另一个用户 | sftp user2@host |
| 管理员操作 | SSH + su |
| 自动化 | SSH Key |
| 限制用户 | SFTP Chroot |
如果你能说明:
我可以给你一个最合适的具体方案。