2013-10-09 2 views
0

컴퓨터 클러스터에 R을 설치하려고했는데 누군가가 Expect를 체크 아웃했다.Linux 기대 SSH가 응답하지 않는다

Linux Expect Command에 대한 자습서를 따라 ssh를 노드로 자동화하고 오픈 소스 R을 자동 설치합니다.

I 종류의 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 
나는 그러나, 나는 LS를 입력하고 그냥 원격에 달려 코드를 실행하고 원격 서버에 로그인 할 수 있습니다

서버 측. 그리고 Ctrl + C를 누르면 로그 아웃되고 내 호스트 서버로 돌아갑니다.

어느 한 방법은 로그인 후 기대에 프로세스를 계속하는 말해 줄 수

업데이트 :. 때문에 Ireeder의 대답에.

expect eof를 interact로 바꾸면 컨트롤이 사용자에게 넘겨집니다.

답변

2

스크립트 끝 부분에 interact을 넣어 스크립트 호출자에게 제어권을 반환하고 원격 셸과 상호 작용할 수 있습니다. 그래서 다음과 같이 스크립트를 변경합니다

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

send -- "\r" 

interact 

http://wiki.tcl.tk/3914

+0

감사에게 나를 위해 일을 많이 참조하십시오. 이 경우에 "eof가 기대하는 것"을 설명 할 수 있습니까? –

+0

프로세스가 닫힐 때 몇 가지 추가 작업을 수행하려면'expect eof' 만 필요합니다. 'expect eof'는 스폰 된 대화 형 ssh 세션을 수동으로 종료 할 때 잘 작동하지 않습니다. 나는 완전히 확신 할 수는 없지만, 스폰 된 ssh 프로세스를 빠져 나갈 때, 예상되는 프로세스가 eof를 예상 할 때까지 "기대"에 대해 사용할 수없는 경쟁 조건이 있다고 가정하고 있습니다. – lreeder

+0

jenkins에서 "expect eof"를 사용할 때 위에서 언급 한 문제가 발생합니다. 젠킨스에서는 작동하지 않으므로 상호 작용을 사용할 수 없습니다. 내가 취할 수있는 다른 접근법이 있습니까? –

관련 문제