如何编写SFTP脚本而不期望?

时间:2015-02-10 13:29:49

标签: bash shell ftp sftp system-administration

我有这个脚本,但它需要期望包工作,我们可以有任何其他方式通过SFTP上传文件,因为我们的安全团队不允许在生产服务器上安装expect包。

我的SFTP上传代码。

/usr/bin/expect<<EOD
spawn /usr/bin/sftp -o Port=$PORT master@$HOST
expect "password:"
send "$PASSWORD\r"
expect "sftp>"
send "put $SOURCE_FILE $TARGET_DIR\r"
expect "sftp>"
send "bye\r"
EOD

有人可以帮助我将其转换为不使用期望。

我们的SFTP服务器使用用户名密码

2 个答案:

答案 0 :(得分:0)

OpenSSH sftp客户端没有为自动化提供密码的原生支持。

所以你必须以某种方式解决这个问题:

  • 使用expectsshpass
  • 进行假用户输入
  • 使用公钥认证
  • 使用任何其他(不常见的)无密码身份验证方法

答案 1 :(得分:0)

一个好的解决方案是使用 lftp 命令,它允许在一个命令行中提供密码和运行sftp命令,如下所示:

$query = DB::table('child');
$query->select(array('child.id','child.jobNumber'));
$query->whereRaw('child.parentId = (select child.parentId from child where child.id = 2)');
$query->orderBy('child.jobNumber');
$query->orderBy('child.id');

// how do I do my where clause?

$list = $query->get();