Laravel项目连接Ubuntu远程服务器双认证登录失败求助
Laravel SFTP双认证密码验证失败解决方案
1. 核对Laravel SFTP配置逻辑
- 检查
config/filesystems.php中的SFTP配置,确保同时指定私钥路径和密码,且双认证参数配置正确:'sftp' => [ 'driver' => 'sftp', 'host' => '192.168.x.x', 'username' => 'test', 'privateKey' => storage_path('app/ssh/id_rsa'), // 确保路径正确,文件权限设为600 'password' => 'test', // 双认证场景必须保留该参数 'port' => 22, 'root' => '/var/www/uploads', 'timeout' => 30, ], - 确认依赖包
league/flysystem-sftp-v3为最新版本,避免版本兼容问题,执行更新命令:composer update league/flysystem-sftp-v3
2. 命令行直连验证双认证流程
在Laravel所在服务器执行SSH命令,模拟双认证登录流程:
ssh -i /path/to/your/private/key test@192.168.x.x
- 若命令行提示输入密码后成功登录,说明Ubuntu端认证逻辑正常,问题出在Laravel配置或代码;
- 若命令行无需输入密码直接登录,说明Ubuntu SSH未开启双认证,需调整服务器配置;
- 若输入密码后仍登录失败,直接排查Ubuntu端的SSH和用户配置。
3. 配置Ubuntu SSH双认证规则
编辑/etc/ssh/sshd_config,确保以下参数设置正确:
PubkeyAuthentication yes PasswordAuthentication yes KbdInteractiveAuthentication yes # 替代旧版的ChallengeResponseAuthentication AuthenticationMethods publickey,password # 强制先公钥验证,再密码验证
修改后重启SSH服务:
sudo systemctl restart sshd
同时检查用户目录权限:
- test用户的
~/.ssh目录权限需为700:chmod 700 /home/test/.ssh ~/.ssh/authorized_keys文件权限需为600:chmod 600 /home/test/.ssh/authorized_keys
4. 开启Ubuntu SSH详细日志排查
编辑/etc/ssh/sshd_config,设置日志级别为DEBUG:
LogLevel DEBUG
重启SSHD后,实时查看连接日志:
sudo journalctl -u sshd -f
触发Laravel的SFTP上传操作,日志会显示认证失败的具体原因(如密码不匹配、认证方式不支持等)。
5. 检查Laravel代码调用逻辑
- 确认代码中正确使用配置的SFTP磁盘,未动态覆盖密码参数:
// 正确调用示例 Storage::disk('sftp')->put('archive.zip', file_get_contents(storage_path('app/archive.zip'))); - 排查是否有代码逻辑错误导致密码参数被篡改,比如.env文件中
SFTP_PASSWORD=test配置是否正确。
6. 验证用户密码有效性
- 重置test用户密码,避免密码输入错误:
sudo passwd test,重新设置为test; - 检查PAM配置
/etc/pam.d/sshd,确保无自定义规则阻止test用户的密码登录(默认配置一般无限制)。
内容的提问来源于stack exchange,提问作者raccoon
相关产品推荐
相关产品推荐

