shell脚本自动化SFTP上传?

我一直在试图让一个PHP脚本SFTP上传文件,但失败了。 我试图在stackoverflow.com上询问我的问题,但还没有收到工作解决scheme:

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

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

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

我试着把这三行放到./automaticupload文件中。 当我执行该文件,但terminal显示我:

 [email protected]'s password: 

即使我在自动上传中input密码行。

我无法创build无密码的ssh / scp / sftp帐户。 远程server.com不给我ssh或scp访问。

我该怎么办?

如果您想从脚本使用sftp,则需要使用ssh-keygen(1)来设置无密码的SSH密钥,或者使用sshpass

我的投票几乎总是针对前者的,但是这可能取决于更适合的情况。

安装和使用期望,它是专为这种情况。

使用autoexpect脚本从录制的实时会话中生成期望脚本。 根据发行版,autoexpect或者包含在主要的expect包中,或者(奇怪地)包含在Ubuntu的expect-dev中。

使用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