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

PowerShell中使用SFTP上传文件无输出及密码配置问题

SFTP上传命令密码相关问题解答

你执行的这条命令默认需要密码验证。执行后无任何输出的核心原因是:原生sftp是交互式程序,启动后会先暂停等待用户输入密码完成身份校验,你通过管道仅传入了文件上传指令,没有传入校验所需的密码,进程会一直卡在密码等待阶段,自然不会产生输出。

注意:原生OpenSSH自带的sftp客户端没有提供命令行直接传入明文密码的参数,这是官方出于安全考虑做的设计,不存在「在sftp命令某个参数位置直接写密码」的原生用法,要实现非交互式传密码上传,可以用以下几种方案:

  • 方案1:借助sshpass工具传入密码(最适配你当前的单命令写法)
    提前安装sshpass工具后,通过sshpass先行传入密码,再唤起sftp进程,推荐用here-document替代echo管道传操作指令,避免转义问题,执行完上传后主动断开连接:
    sshpass -p "你的SFTP账号对应密码" sftp TESTSHELTER@shelter-ftp.outlinesys.com << EOF
    put C:\Users\abhishek.chawla\Desktop\AbhishekC_bills.zip deployment/AbhishekC_bills.zip
    bye
    EOF
    
    注意:该方案密码会明文保存在命令历史中,仅适合临时调试使用,生产环境不推荐。如果你的SFTP服务没有用默认22端口,需要在sftp后加上-P 你的服务端口号参数,否则会连不上服务端卡住。
  • 方案2:配置SSH密钥免密登录(长期使用最安全的方案)
    本地生成SSH密钥对后,将公钥上传到SFTP服务端对应用户的信任公钥列表中,后续所有sftp连接会自动走公钥身份校验,不需要输入密码,你原本写的管道命令不需要额外加密码参数就能直接运行。
  • 方案3:用expect脚本自动填充密码
    没有安装sshpass权限的场景,可以写expect脚本捕获sftp输出的密码提示,自动填入密码完成校验后执行上传操作,示例脚本:
    #!/usr/bin/expect
    spawn sftp TESTSHELTER@shelter-ftp.outlinesys.com
    expect "*password:*"
    send "你的SFTP账号对应密码\r"
    expect "sftp>"
    send "put C:\\Users\\abhishek.chawla\\Desktop\\AbhishekC_bills.zip deployment/AbhishekC_bills.zip\r"
    expect "sftp>"
    send "bye\r"
    expect eof
    

内容的提问来源于stack exchange,提问作者Abhi Chawla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:45:31