Аутентификация ssh через expect

Модератор: Модераторы разделов

Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Аутентификация ssh через expect

Сообщение minoru-kun »

Собственно, задача: скормить 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

Re: Аутентификация ssh через expect

Сообщение IMB »

А почему не хотите использовать ключи?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: Аутентификация ssh через expect

Сообщение /dev/random »

Для передачи управления от скрипта человеку используется команда interact.

Да, и ещё: я бы всё-таки написал не "password:", а "assword:", поскольку первая буква может быть и заглавной. По крайней мере, у меня заглавная.
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: Аутентификация ssh через expect

Сообщение minoru-kun »

А кто-нибудь может сказать, почему в случае, если пароль не подходит, код около '-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

Re: Аутентификация ssh через expect

Сообщение /dev/random »

minoru-kun писал(а):
26.06.2011 18:52
А кто-нибудь может сказать, почему в случае, если пароль не подходит, код около '-re .' выполняется раньше, чем около '*ermission denied*'?

Он реагирует на оставшиеся символы после первого "Password:" (пробел, перевод строки)
Спасибо сказали: