过于复杂的代码问题

时间:2016-01-02 10:06:23

标签: expect

所以我试着写一个通过ssh自动连接的脚本

我有三个文件。 首先是带有我的登录凭证的文本文件(file.txt)(现在只有一个,但稍后会有一些):

user1 abcd 

第二个文件(connect.sh)是一个bash文件,它读取凭据并将它们传递给expect文件看起来像这样:

#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do 
    count=0; 
    words[0]="";  
    for word in $line; do 
        words[$count]="$word" 
        count=$(($count + 1)) 
    done 
    myDir="$(dirname "$0")" 
    "$myDir/find.sh" "${words[1]}" 
done < "$1"

第三个文件(find.sh)是/ expect文件,如下所示:

#!/usr/bin/expect

set password [lindex $argv 0] 
spawn ssh "test@host.com" 
expect "Password:" 
send "$password\r" 
interact

但是,当我尝试登录时,无法提供密码。据我检查,密码正确发送到expect脚本。我也尝试了设置超时功能,但它也不起作用。

1 个答案:

答案 0 :(得分:1)

正如msw所指出的,你可以做到

#!/usr/bin/expect

proc main {passfile} {
    set fh [open $passfile r]
    while {[gets $fh line] != -1} {
        lassign [split $line] user pass
        connect $user $pass
    }
    close $fh
}

proc connect {user password} {
    spawn ssh $user@host.com
    expect "Password:" 
    send "$password\r" 
    interact
}

main [lindex $argv 0]

然后使用密码文件

调用您的expect脚本
./test.exp file.txt

BTW,“。sh”不是用于期望计划的很好的扩展。