2

我正在尝试编写一个 shell 脚本来将文件传输到运行超简单 sftp 服务器的远程 Windows 机器。它是来自 coreftp 的轻量级版本。所以我没有使用公钥身份验证的选项。

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

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

sftp $USER@$HOST

不使用任何工具就不能从 shellscript 输入密码吗?

4

3 回答 3

1

有几种选择:

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

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

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

于 2014-11-19T08:48:30.570 回答
0

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

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

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

于 2014-11-19T08:09:05.730 回答
0

你可以使用期望..

expect -c 'spawn sftp root@your-domain.com; expect password; send "your-password\n"; interact'
于 2013-02-06T15:55:48.440 回答