从csv文件读取主机用户名和密码时,错误没有使用expect的主机路由

时间:2012-03-27 15:11:18

标签: expect

我编写了一个脚本来从文件中读取用户名,密码和主机信息。 然后,我解析此信息以获取变量。然后我想将这些变量添加到expect脚本中,该脚本读取我文件中的所有ip地址,并在我尝试登录的远程设备上执行某些命令。该脚本在连接到已知主机时工作但是我看到的是有一台设备未启动并运行,系统提示出现以下错误。 ssh:连接到主机192.168.3.2端口22:没有到主机的路由

文件 我想做两件事 1.跳过主机并移至下一个主机 2.将关闭的主机记录到另一个文件,以便我可以解决该主机的网络问题。

请参阅下面的脚本。请大家接受任何帮助。

#! /usr/bin/expect -f



## Read the file
set fid [open /csv_pars/employee1.csv]
set content [read $fid]
close $fid

## Split into records on newlines
set records [split $content "\n"]

## Iterate over the records
foreach rec $records {

## Split into fields on comma
set fields [split $rec ","]
## Assign fields to variables and print some out...
lassign $fields\  ipaddr username password
puts "$ipaddr"
puts "$username"
puts "$password"





if {$ipaddr == ""} continue
spawn ssh  -X "$username@$ipaddr"
sleep 2
expect "password:"


sleep 2
send  "$pass\r"
expect  "$"
send -- "ls -l\r"
expect "$"
send -- "exit\r"


expect eof




}

1 个答案:

答案 0 :(得分:0)

您需要看到以下两种情况之一:密码提示或错误消息:

spawn ssh  -X "$username@$ipaddr"
expect {
    -re "password: ?$" {
        send  "$pass\r"
        expect  "$"
        send -- "ls -l\r"
        expect "$"
        send -- "exit\r"
        expect eof
    }
    "No route to host" {
        set fid [open error.log a]
        puts $fid "[clock format [clock seconds]]: No route to host $ipaddr"
        close $fid
    }
}