所以我试着写一个通过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脚本。我也尝试了设置超时功能,但它也不起作用。
答案 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”不是用于期望计划的很好的扩展。