2013-10-09 2 views
0

Я попытался установить R через кластер компьютеров, и кто-то сказал мне проверить Expect.Linux Expect SSH зависает

Я следовал учебному курсу Linux Expect Command для автоматизации процесса ssh в узел и автоматической установки открытого источника R.

Я вроде застрял на SSH части: (Tutorial goes here)

#!/usr/bin/expect -f 

if {[llength $argv] != 3} { 
puts "usage: ssh.exp username server password" 
exit 1 
} 

set username [lrange $argv 0 0] 
set server [lrange $argv 1 1] 
set password [lrange $argv 2 2] 

set timeout 60 

spawn ssh [email protected]$server.mycompany.com 

match_max 100000 

expect "*?assword:*" 

send -- "$password\r" 

send -- "\r" 

expect eof 

я могу запустить код и войти в удаленный сервер, однако, я набираю в латах, и он просто висит на пульте дистанционного управления сервер. И я ctrl + c, и он выходит из системы и возвращается на мой хост-сервер.

Может ли один скажите мне, как продолжить процесс в Ожидать после войти

Update:. Благодаря ответ Ireeder в.

Вам просто нужно заменить expect eof на взаимодействие, и он передаст управление пользователю.

ответ

2

Поместите interact в конце скрипта, который возвращает управление вызывающему сценарию и позволяет вам взаимодействовать с удаленной оболочкой. Так изменить сценарий, как это:

#... top of script 
send -- "$password\r" 

send -- "\r" 

interact 

См http://wiki.tcl.tk/3914

+0

Большое спасибо, что работает для меня. Можете ли вы объяснить, что делает «ожидание эф» в этом случае? –

+0

Вам нужно только «ожидать eof», если вы хотите выполнить какое-либо последующее действие, когда процесс будет закрыт. 'ожидать, что eof' не работает так хорошо, когда вы вручную выходите из порожденной интерактивной сессии ssh. Я не совсем уверен, почему, но я предполагаю, что есть условие гонки, когда, когда вы выходите из порожденного процесса ssh, порожденный процесс недоступен для «ожидаемого» к ожидаемому времени для поиска eof. – lreeder

+0

Я столкнулся с вышеупомянутой проблемой при использовании функции «ожидать эф» в jenkins. Я не могу использовать взаимодействие, поскольку он не будет работать в jenkins. Есть ли другой подход, который я могу предпринять? –

Смежные вопросы