You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SFTP文件传输脚本卡在密码输入环节的解决咨询

SFTP文件传输脚本卡在密码输入环节的解决咨询

嗨,我完全懂你的困扰——手动敲命令的时候一切顺畅,但写成批处理脚本后,输入密码就卡住了,没法自动执行后续的put *.txt命令,对吧?这是因为普通的批处理没法直接在交互式SFTP会话里自动衔接指令,给你几个实用的解决办法:

方法1:用批量指令文件配合SFTP的批量模式

SFTP支持通过-b参数指定一个包含指令的文本文件,这样就能自动执行里面的命令,不用手动输入。不过原生SFTP没法直接在文件里写密码,所以得结合免密或者支持密码参数的工具使用,先看基础写法:

  1. 先创建一个包含SFTP指令的文本文件,比如sftp_commands.txt,内容如下:
put *.txt
quit
  1. 然后在批处理里调用SFTP并指定这个指令文件:
cd c:\users\user\documents\transfer
sftp -b sftp_commands.txt user@10.24.200.38

不过这时候还是会弹出密码输入框,要解决自动输密码的问题,更推荐下面两种方法。

方法2:用PuTTY的psftp工具(适配Windows环境)

psftp是PuTTY套件里的SFTP工具,支持直接在命令行指定密码,完美适配批处理:

方式A:直接在脚本内嵌指令

cd c:\users\user\documents\transfer
psftp user@10.24.200.38 -pw 你的密码 -b - << EOF
put *.txt
quit
EOF

方式B:用独立指令文件(适合多指令场景)

cd c:\users\user\documents\transfer
echo put *.txt> sftp_cmds.txt
echo quit>> sftp_cmds.txt
psftp user@10.24.200.38 -pw 你的密码 -b sftp_cmds.txt

⚠️ 提醒:把密码明文写在脚本里有安全风险,若服务器权限管理不严容易泄露,优先考虑下面的免密方法。

方法3:配置SSH密钥免密登录(最安全可靠)

这是长期使用的最优解,彻底告别密码输入环节:

  1. 生成SSH密钥对:用PuTTYgen(PuTTY套件工具)或者Windows自带的ssh-keygen命令生成密钥对,一路默认设置即可,不要设置密钥密码(否则还是需要手动输入,失去自动执行的意义)。
  2. 上传公钥到服务器:把生成的公钥文件(比如id_rsa.pub)内容复制到服务器上用户目录下的~/.ssh/authorized_keys文件里(如果是Windows服务器,对应路径为C:\Users\你的用户名\.ssh\authorized_keys,需自行创建目录和文件)。
  3. 修改批处理脚本:现在无需密码验证,直接执行指令:
cd c:\users\user\documents\transfer
sftp user@10.24.200.38 << EOF
put *.txt
quit
EOF

或者依旧使用批量指令文件的方式,效果一致。

为什么原来的脚本会卡住?

你原来的批处理是按顺序执行命令:先进入指定目录,然后启动sftp交互式会话,此时批处理会暂停,等待你在SFTP会话里手动输入密码和指令;而后面的put *.txt是批处理上下文里的命令,并非SFTP会话内的指令,所以永远不会被执行——这就是卡住的核心原因。

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

火山引擎 最新活动