2010-01-19 10 views
1
cat hosts.txt | while read h; do telnet $h; done 

내가 이것을 실행하면 연결을 거부 첫번째 호스트로 텔넷 접속하지만 대신 파일에서 다른 호스트에 걸쳐 반복의 종료 후 종료합니다. 첫 번째 호스트 이후에 루프가 종료되는 이유는 무엇입니까? 어떻게 해결할 수 있습니까?루프는 첫 번째 반복

감사합니다.

+0

그 밖의 스크립트에는 무엇이 있습니까? 특히 "set -e"가 있습니까? –

답변

1

텔넷은 대화 형입니다. 너는 실제로 무엇을하고 싶니? 당신이 "텔넷"세션을 자동화하려는 경우, 당신은 내 bash에서 잘 작동 SSH

while read -r host 
do 
    ssh <options> <commands> "$host" 
done <"hosts.txt" 
4

를 사용할 수 있습니다

$ cat hosts.txt 
machine1 
machine3 

$ cat hosts.txt | while read h; do telnet $h; done 
Trying 9.190.123.47... 
telnet: Unable to connect to remote host: Connection refused 
Trying 9.190.123.61... 
telnet: Unable to connect to remote host: Connection refused 

을하지만, 나는 컴퓨터에 연결할 때 하지 않는 것을 연결을 거부, 내가 얻을 : 나는 실제로 성공적으로 를 연결하고 있습니다 때문에

$ cat hosts.txt 
machine2 
machine1 
machine3 

$ cat hosts.txt | while read h; do telnet $h; done 
Trying 9.190.123.48... 
Connected to machine2. 
Escape character is '^]'. 
Connection closed by foreign host. 

의 그이고 다른 모든 호스트 이름은 telnet 세션으로 전송됩니다. 이들은 로그인을 시도하는 데 의심의 여지가 없으며 나머지 호스트 이름은 사용자/암호로 유효하지 않으므로 세션은 그로 인해 닫혀 있습니다.

당신은 단지 각 시스템에 대화 형으로 로그인 할 경우

, 당신은 사용할 수 있습니다

for h in $(cat hosts.txt); do telnet $h 1023; done 

최초의 성공적인 세션에 호스트 이름의 나머지 부분을 캡처하지 것이다.

텔넷 세션을 실제로 자동화하려면 expect과 같은 도구를 보거나 rsh과 같은 원격 UNIX 도구 중 하나를 사용해야합니다.

+0

rsh (원격 쉘)에는 보안이 설정되지 않은 기록이 있습니다. ssh를 권하고 싶습니다. – ghostdog74

1

앞서 언급했듯이 텔넷은 입력을 필요로하는 대화 형 프로그램입니다.

첫 번째 이후의 모든 호스트는 첫 번째 텔넷에 의해 입력으로 소비됩니다.

스크립트가 무엇을하려하는지 명확하지 않습니다. 아마도 당신은 당신이하려고하는 것에 대해 더 명확해야합니다.