2014-12-16 4 views
0

이 문제를 해결할 수있는 여러 가지 방법이 있습니다. 환경에 따라 다를 수 있습니다. Ruby에서 원격 서버로 텔넷하기 위해 스크립트를 만들고, 로그인하고, 셸 유형 (로그인 후 프롬프트와 앞에 "프롬프트"가 없음)을 입력 한 후 다음 프롬프트에서 사용자 ID를 입력하십시오. 현재는 사용자를 통해 로그인하고 통과하지만 용어 부분에서는 멈 춥니 다. 정규식, 문자열, 잠자기를 사용하려고 시도한 다음 ("xterm"하지만이 프롬프트를 지나칠 수있는 것은 아무것도 없습니다.) 여기에 끊어지고 출력이 이어지는 코드 스 니펫이 있습니다.Ruby Net :: Telnet waitfor() does not work

$telnet = Net::Telnet::new("Host" => 'hostname', 
         "Output_log" => 'output.txt', 
         "Dump_log" => 'Dump.txt', 
         "Binmode" => false, 
         "Timeout" => false, 
         "Prompt" => /.* $ $/) { |c| print c } 
$telnet.login("user", "pass") { |c| print c } 
$telnet.waitfor("TERM = (xterm) ") 
$telnet.puts("xterm") { |c| print c } 
$telnet.waitfor(Match => /Enter\s*$/) { |c| print c } 
$telnet.puts("userid") 

출력은 다음과 같다 :.

HP-UX ds107492 B.11.11 U 9000/800 (tm) 

login: user 
Password: 
Please wait...checking for disk quotas 
. i 

.[ci 

.*s1^i 

See /etc/copyright for copyright notices 
You have mail. 
'You have mail.' 
TERM = (xterm) 
+0

Ruby'ssh' gem을보고 싶을 수도 있습니다. 잘 작동하고, 일시 정지와 지연을 포함하여 소켓 입/출력을 처리하는 방법을 읽고 싶다면 소스 코드가 짧고 멋집니다. – joelparkerhenderson

+0

나는 ssh 또는 net :: ssh-telnet에 대해 생각하고 있었지만 우리의 환경에서는 telnet을 "보안"기능으로 사용해야만한다. –

+0

업데이트로 net-ssh-telnet을 시도했으나 끊어졌다. 동일한 영역에서 perl Net :: Telnet과 동일합니다. 나는 초와 이야기했다. "보안"프로토콜을 보장하기 위해 내가해야 할 일이 무엇인지 말해 줬어. 나는 지금도 ssh를 사용할 수있다. :) –

답변

1
$s.waitfor("Match" => /TERM\s*/){ |c| print c } 
$s.print("xterm\n"){ |c| print c } 

답을 것 같다, 나를 프롬프트 과거 이동 허용 아직도 있는지 어떤이 정규식과 다른 모든 난의 차이 시도했습니다 :/