39

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

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

运行命令时:

sftp -b /home/batchfile.sftp <user>@<server ip>:<folder>

包括batchfile.sftp这些数据:

password
lcd [local folder]
cd [sftp server folder]
get *
bye

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

sftp <user>@<server ip>:<folder>

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

4

6 回答 6

56

您需要安装 sshpass 程序。然后:

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

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

于 2014-02-01T04:56:12.420 回答
23

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

sftp login@host < /path/to/command/list

然后将要求您输入密码(按照正常情况),但是脚本中的所有命令在此之后运行。

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

于 2014-02-06T00:47:53.123 回答
1

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

手册明确指出:

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

换句话说,你必须建立一个公钥认证。然后,您将能够运行批处理脚本。

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

于 2013-07-21T00:58:33.403 回答
1
PSFTP -b path/file_name.sftp user@IP_server -hostkey 1e:52:b1... -pw password

文件内容是:

lcd "path_file for send"

cd path_destination

mput file_name_to_send

quit

让主机密钥运行:

psftp  user@IP_SERVER
于 2018-10-25T14:39:35.653 回答
1

您需要使用命令 pscp 并强制它通过 sftp 协议。pscp 会在您安装 PuttY 时自动安装,PuttY 是一个通过 ssh 连接到 linux 服务器的软件。

当你有你的 pscp 命令时,这里是命令行:

pscp -sftp -pw <yourPassword> "<pathToYourFile(s)>" <username>@<serverIP>:<PathInTheServerFromTheHomeDirectory>

这些参数(-sftp 和 -pw)仅适用于 pscp 而不是 scp。如果您想以递归方式上传文件夹中的所有内容,还可以添加 -r。

于 2020-07-31T08:46:02.167 回答
0

您提到批处理文件,然后假设您在谈论Windows系统,我是否正确?如果是这样,您将无法使用 sshpass,您将不得不切换到其他选项。

遵循截然相反的哲学的两个这样的选择是:

  • psftp:可以从批处理脚本中调用的命令行工具;psftp 是 PuTTY 包的一部分,你可以在这里找到它 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  • Syncplify.me FTP Script:用于 Windows 的可编写脚本的 FTP/S 和 SFTP 客户端,允许您将密码存储在加密的“配置文件”中;在这里查看 http://www.syncplify.me/products/ftp-script/

无论哪种方式,强烈建议从密码切换到 PKI 身份验证。

于 2014-10-12T16:12:22.680 回答