Модератор: Модераторы разделов
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux
Сообщение
minoru-kun » 26.06.2011 11:36
Собственно, задача: скормить ssh пароль через expect и получить доступ к удаленной командной строке через терминал. Разумеется, если в удаленной командной строке я запущу, например, mc, то он должен нормально работать.
Пока что накидал вот такой код:
Код:
package require Tk
package require Expect
wm withdraw .
set timeout -1
spawn {*}$argv
set pass_counter 0
expect {
"password:" {
if { $pass_counter > 0 } {
tk_messageBox -icon error -message "Invalid password"
exit
} else {
exp_send "$::env(SSHPASS)\n"
incr pass_counter
exp_continue
}
} "yes/no)?" {
exp_send [tk_messageBox -type yesno -message "Are you sure you want to connect?"]
exp_send "\n"
exp_continue
} "Connection refused" {
tk_messageBox -icon error -message "Connection refused"
exit
} timeout {
puts "timeout"
exit
} eof {
exit
}
}
но удаленная командная строка не реагирует на команды из терминала.
Пока что в моем проекте используется код из sshpass, прибитый гвоздями к Tcl в качестве бинарного расширения, но с ним есть свои проблемы.
IMB
Сообщения: 2567
ОС: Debian
Сообщение
IMB » 26.06.2011 12:06
А почему не хотите использовать ключи?
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo
Сообщение
/dev/random » 26.06.2011 12:49
Для передачи управления от скрипта человеку используется команда interact.
Да, и ещё: я бы всё-таки написал не "password:", а "assword:", поскольку первая буква может быть и заглавной. По крайней мере, у меня заглавная.
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux
Сообщение
minoru-kun » 26.06.2011 18:52
А кто-нибудь может сказать, почему в случае, если пароль не подходит, код около '-re .' выполняется раньше, чем около '*ermission denied*'?
Код:
package require Expect
wm withdraw .
set timeout -1
spawn {*}$argv
set pass_counter 0
expect {
"*ermission denied*" {
tk_messageBox -icon error -message "Invalid password"
exit
} "*assword:" {
exp_send "$::env(SSHPASS)\n"
incr pass_counter
exp_continue
} "*yes/no)?" {
exp_send [tk_messageBox -type yesno -message "Are you sure you want to connect?"]
exp_send "\n"
exp_continue
} "Connection refused" {
tk_messageBox -icon error -message "Connection refused"
exit
} -re . {
interact
exit
} timeout {
puts "timeout"
exit
} eof {
exit
}
}
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo
Сообщение
/dev/random » 27.06.2011 07:07
minoru-kun писал(а): ↑ 26.06.2011 18:52
А кто-нибудь может сказать, почему в случае, если пароль не подходит, код около '-re .' выполняется раньше, чем около '*ermission denied*'?
Он реагирует на оставшиеся символы после первого "Password:" (пробел, перевод строки)