2011-08-23 3 views
2

여기에서 telnet을 사용하여 두 대의 컴퓨터에 연결을 만들고 원격 호스트에서 "file.txt"라는 파일을 만들고 결과를 저장하고 있습니다. file.txt에서 "ls"명령 실행 이제 파일을 로컬 호스트에 보내야합니다. 나는 그것을 어떻게하는지 모른다. 그것을 아는 사람은 친절하게 나를 도와줍니다.tcl-expect를 사용하여 remotehost에서 localhost로 파일을 복사하는 방법

#!/usr/local/bin/expect 
spawn telnet <machine ip> 
expect "login:" 
send "<username>\n" 
expect "Password:" 
send "<password>\n" 
expect "bash" 
send " ls > file.txt\r " 
expect "bash" 
send " cat file.txt \r " 
expect "bash" 
send " command for copying file to the localhost computer\r" 
expect "bash" 
send "exit\r" 
+1

필수 주석 :이 작업을 실제로 수행하기 위해 SSH를 사용할 수 없습니까? – kostix

+0

나는 ssh에 대해 모른다. – deva

+0

정말 좋은 시간입니다. 자세한 정보는 Donal 's 답변 뒤에 나온 댓글 글을 참고하십시오. – kostix

답변

3

당신은 강력하게이 작업 sshscp 사용을 권장하고 있습니다.

#!/usr/local/bin/expect 

### Factor these out 
set user <username> 
set pass <password> 
set host <machineIP> 

### Get the file list into a file remotely 
spawn ssh [email protected]$host sh -c {ls -1 >file.txt} 
expect { 
    "Password:" { 
     send "$pass\r" 
     exp_continue 
    } 
    eof { 
     close 
    } 
} 
### Copy the file to the local machine 
spawn scp [email protected]${host}:file.txt . 
expect { 
    "Password:" { 
     send "$pass\r" 
     exp_continue 
    } 
    eof { 
     close 
    } 
} 
+0

위의 프로그램에서 텔넷을 사용할 수없는 이유는 무엇입니까? – deva

+0

이 줄의 기능은 무엇입니까? 나는 그것이 무엇을 의미합니까? -re {(? n) (^. *) $} – deva

+0

몇 가지주의 사항 : * ls -1은 한 줄에 * 하나의 파일을 보장하기 때문에 사용합니다. 변수 이름에서는':'이 합법적이기 때문에 나는'$ {host}'를 사용하지만 나는 그것을 하나가되기를 원하지 않는다. 나는 보통'ssh_agent' (또는'ssh'와'scp'에'-i' 옵션)을 사용하여 패스워드를 전혀 제공 할 필요가 없지만 다른 패스워드를 설정해야합니다. –

관련 문제