如何使用sftp批处理文件发送密码

jud*_*ith 34 passwords sftp batch-file

我正在尝试使用批处理脚本从sftp站点下载文件.我收到以下错误:

Permission denied (publickey,password,keyboard-interactive).
Couldn't read packet: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)

运行命令时:

sftp -b /home/batchfile.sftp <user>@<server ip>:<folder>
Run Code Online (Sandbox Code Playgroud)

batchfile.sftp包括这些数据:

password
lcd [local folder]
cd [sftp server folder]
get *
bye
Run Code Online (Sandbox Code Playgroud)

注意:在提示符下运行时它正在工作

sftp <user>@<server ip>:<folder>
Run Code Online (Sandbox Code Playgroud)

但我需要能够自动输入密码.

Joe*_*Dyk 42

您将要安装sshpass程序.然后:

sshpass -p YOUR_PASSWORD sftp -oBatchMode=no -b YOUR_COMMAND_FILE_PATH USER@HOST

显然,最好设置公钥认证.无论出于何种原因,只有在无法做到的情况下才能使用它.

  • 谢谢你!这是真正回答问题的唯一评论。有时根本不可能获得密钥文件。 (3认同)
  • 要做到这一点更安全,请将`export SSHPASS ='your_password'`导出到`〜/ .bashrc`并使用`-e`标志运行.我在一些项目中使用过这个cmd:`echo'ls -t upload/*.xml'| sshpass -e sftp -oBatchMode = no -b - user@example.com | grep -v"sftp>"| 头-n1` (2认同)

Tig*_*ger 18

如果要生成要运行的命令堆,然后从终端调用该脚本,则可以尝试以下操作.

sftp login@host < /path/to/command/list
Run Code Online (Sandbox Code Playgroud)

然后,系统会要求您输入密码(按照正常情况),但之后脚本中的所有命令都会运行.

这显然不是可以在cron作业中使用的完全自动化的选项,但它可以在终端中使用.


ako*_*ond 1

我建议您使用 -v 选项运行 sftp。理解正在发生的事情变得更加容易。

手册明确指出:

最终的使用格式允许使用 -b 选项进行自动会话。在这种情况下,有必要配置非交互式身份验证,以避免在连接时输入密码(有关详细信息,请参阅 sshd(8) 和 ssh-keygen(1))。

换句话说,您必须建立公钥身份验证。然后您将能够运行批处理脚本。

PS 将密码放入批处理文件中是错误的。

  • 我否决了这个答案,因为它与问题所问的相反。“PS”元素似乎是一个值得探讨的话题。事情很少有“对”或“错”之分,而是不同因素的妥协和权衡。 (7认同)