我一直试图获取一个 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