用于自动化 SFTP 上传的 Shell 脚本?

用于自动化 SFTP 上传的 Shell 脚本?

我一直试图获取一个 PHP 脚本来通过 SFTP 上传文件,但失败了。我尝试在 stackoverflow.com 上提问,但没有得到可行的解决方案:

https://stackoverflow.com/questions/1767117/how-to-sftp-upload-files-from-php

所以现在我想尝试一种不同的方法。有没有办法编写一个 shell 脚本,可以发出几个命令来将文件上传到另一台服务器?如果我从终端逐个发出命令,它将看起来像:

>sftp [email protected]
>password: mypassword
>put file.csv

我尝试将这三行放入 ./automaticupload 文件中。当我执行该文件时,终端显示:

[email protected]'s password:

即使我在自动上传中输入了密码。

我无法创建无密码的 ssh/scp/sftp 帐户。远程 server.com 不授予我 ssh 或 scp 访问权限。

我应该怎么办?

答案1

如果你想通过脚本使用 sftp,你需要使用 ssh-keygen(1) 设置无密码 SSH 密钥 或使用密码

我几乎总是会选择前者,但这取决于具体情况,哪种选择更合适。

答案2

安装并使用 expect,它就是为这种情况设计的。

使用 autoexpect 脚本从录制的实时会话生成 expect 脚本。根据发行版的不同,autoexpect 要么包含在主 expect 包中,要么(奇怪的是)包含在 Ubuntu 上的 expect-dev 中。

答案3

使用socat:http://www.dest-unreach.org/socat/

例如:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@host",pty,setsid,ctty

相关内容