Shell脚本从脚本输入密码

时间:2013-01-25 05:17:55

标签: linux shell ssh sftp

我正在尝试编写一个shell脚本来将文件传输到运行ultra simple sftp server的远程Windows机器。 它是来自coreftp的轻型版本。 所以我没有选择使用公钥认证。

从Linux端开始,它是非英特尔平台的精简版,所以如果我想使用“期待”,我就无法安装expect / tcl / tk。 这是出于测试目的,我想从Shell脚本输入密码。有可用的方法吗?

#!/bin/sh
HOST='10.x.x.x'
USER='user'
PASSWD='passwd'

sftp $USER@$HOST

是否无法在不使用任何工具的情况下从shellscript输入密码?

3 个答案:

答案 0 :(得分:1)

有几种选择:

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

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

  3. 然后您可以使用一些支持SFTP的脚本语言。如果你走这条路,不要只使用一些类似于期望的模块来自动化密码认证,而是使用一些自己实现SFTP协议的模块,如果你想要执行错误检查,这将使你更容易

答案 1 :(得分:0)

你可以使用expect ..

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

答案 2 :(得分:0)

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

简而言之,您需要一个可以处理伪终端的程序来完成您的任务。无论如何,perl有expect模块,上面提到的直接C编程,或lpty,还有另一个伪终端程序。或者,如果您的Linux内核支持/ dev / ptmx和/ dev / pty /,您可以通过打开并访问设备文件来创建伪终端(可能来自shell脚本,但我不确定)。我怀疑你的简单Linux on ARM支持这个......

移植lpty应该比预期的容易。