如何通过WinSCP使用sudo用户实现SFTP连接?
如何通过WinSCP使用sudo用户实现SFTP连接?
看起来你在尝试用WinSCP通过sudo用户连接AWS EC2实例的SFTP时碰了壁,我来帮你梳理下可能的问题和解决办法——你遇到的「Server refused our key」错误,核心是认证环节出了问题,再加上WinSCP的配置和sudo权限设置可能没踩对要点,咱们一步步来调整:
第一步:先搞定sudo用户的SSH密钥配置
你之前用普通ubuntu用户能正常连接,是因为这个用户的~/.ssh/authorized_keys里已经有你的EC2密钥对应的公钥,但你的sudo用户(sudouser)大概率没配置这个公钥,所以服务器会拒绝你的密钥登录。操作步骤如下:
- 先用ubuntu用户登录EC2终端,切换到sudouser:
sudo su - sudouser - 如果sudouser没有
.ssh目录,就创建并设置权限:mkdir -p ~/.ssh chmod 700 ~/.ssh - 把ubuntu用户的公钥复制到sudouser的目录下:
cp /home/ubuntu/.ssh/authorized_keys ~/.ssh/ - 最后给公钥文件设置正确权限(这步很重要,权限不对会被SSH拒绝):
chmod 600 ~/.ssh/authorized_keys - 退出sudouser回到ubuntu用户:
exit
完成这步后,你可以先在终端测试:ssh sudouser@你的EC2实例IP,如果能正常登录,说明密钥配置没问题了。
第二步:调整WinSCP的SFTP配置(别用sudo su -c的方式)
你之前设置的SFTP服务器命令sudo su -c /bin/sftp-server容易触发认证问题,咱们换更可靠的配置:
- 打开WinSCP的站点设置,文件协议选SFTP
- 进入「高级」->「SFTP」选项卡,在「SFTP服务器」输入框里填:
(注:如果你的sftp-server路径不是这个,可以在终端用sudo -u root /usr/lib/openssh/sftp-serverwhich sftp-server命令查实际路径) - 不需要修改「Shell」设置,保持默认或者设为
/bin/bash即可,我们靠SFTP服务器的sudo调用提升权限,不用先切换Shell。
第三步:配置visudo(兼顾保留sudo密码的需求)
你之前设置的sudouser ALL=NOPASSWD: ALL会让sudouser免密码执行所有sudo命令,但你想要保留sudo密码,这里分两种情况:
- 完全保留sudo密码(所有操作都要输密码):把你加的那两行删掉,保留默认的
sudouser ALL=(ALL) ALL(如果sudouser已经在sudo组里,这行可能已经存在)。这种情况下,WinSCP连接时会在认证后弹出密码输入框,输入sudouser的sudo密码即可。 - 仅SFTP操作免密码,其他sudo操作仍需密码:在visudo里添加一行(用
sudo visudo打开编辑):
这样既不用每次SFTP连接都输密码,又能保证其他sudo操作的安全性,推荐这种方式。sudouser ALL=(ALL) NOPASSWD: /usr/lib/openssh/sftp-server
第四步:测试连接
配置完以上步骤后,重新打开WinSCP的站点连接:
- 用户名填
sudouser,私钥选你用于EC2登录的那个密钥文件 - 连接时如果需要输入密码,就输入sudouser的sudo密码(如果你选了第二种visudo配置,这步会跳过)
- 成功连接后,你就拥有root权限的文件操作权限了
备注:内容来源于stack exchange,提问作者Warsame
相关产品推荐
相关产品推荐

