Shell脚本从脚本input密码

我正在尝试编写一个shell脚本来将文件传输到运行一个超简单的sftp服务器的远程windows机器上。 它是从coreftp的轻型版本。 所以我没有select使用公钥authentication。

从Linux结束其非英特尔平台的精简版,所以,如果我想使用“期待”,我不能安装expect / tcl / tk。 这是为了testing目的,我想从Shell脚本input密码。 有没有方法可用?

#!/bin/sh HOST='10.xxx' USER='user' PASSWD='passwd' sftp $USER@$HOST 

是不是可以不使用任何工具从shellcriptinput密码?

有几个选择:

  1. 您可以使用sshpass来自动执行密码验证。

  2. 来自Putty软件包( psftp )的SFTP客户端接受来自命令行的密码(尽管这样做并不完全安全)。

  3. 然后你可以使用一些支持SFTP的脚本语言。 如果你走这条路线,不要只用一些类似expect的模块来自动进行密码认证,而应该使用一些自己实现SFTP协议的模块,如果你想进行错误检查的话,这会让你更容易一些。

你可以使用期望..

 expect -c 'spawn sftp root@your-domain.com; expect password; send "your-password\n"; interact' 

这个页面包含一个简单的演示程序,在C中创建伪终端,可以与需要密码的应用程序(更准确地说,需要终端的应用程序)进行交互,如ftp,sftp客户端等。同一页面的引用会话也提到lpty ,这是另一个更完整的实用程序,您可以使用它在伪终端上运行您的程序。

总之,你需要一个可以处理伪终端的程序来完成你的任务。 可以期望,perl具有期望的模块,上面提到的直接C编程,或者是另外一个伪终端程序。 或者,如果你的Linux内核支持/ dev / ptmx和/ dev / pty /,你可以通过打开和访问设备文件(从shell脚本,也许,但我不确定)创建伪终端。 我怀疑你在ARM上的简单Linux支持,虽然…

移植应该比预期容易。