You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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服务器」输入框里填:
    sudo -u root /usr/lib/openssh/sftp-server
    
    (注:如果你的sftp-server路径不是这个,可以在终端用which sftp-server命令查实际路径)
  • 不需要修改「Shell」设置,保持默认或者设为/bin/bash即可,我们靠SFTP服务器的sudo调用提升权限,不用先切换Shell。

第三步:配置visudo(兼顾保留sudo密码的需求)

你之前设置的sudouser ALL=NOPASSWD: ALL会让sudouser免密码执行所有sudo命令,但你想要保留sudo密码,这里分两种情况:

  1. 完全保留sudo密码(所有操作都要输密码):把你加的那两行删掉,保留默认的sudouser ALL=(ALL) ALL(如果sudouser已经在sudo组里,这行可能已经存在)。这种情况下,WinSCP连接时会在认证后弹出密码输入框,输入sudouser的sudo密码即可。
  2. 仅SFTP操作免密码,其他sudo操作仍需密码:在visudo里添加一行(用sudo visudo打开编辑):
    sudouser ALL=(ALL) NOPASSWD: /usr/lib/openssh/sftp-server
    
    这样既不用每次SFTP连接都输密码,又能保证其他sudo操作的安全性,推荐这种方式。

第四步:测试连接

配置完以上步骤后,重新打开WinSCP的站点连接:

  • 用户名填sudouser,私钥选你用于EC2登录的那个密钥文件
  • 连接时如果需要输入密码,就输入sudouser的sudo密码(如果你选了第二种visudo配置,这步会跳过)
  • 成功连接后,你就拥有root权限的文件操作权限了

备注:内容来源于stack exchange,提问作者Warsame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:03:08