사용자 이름과 비밀번호를 제공하기 위해 에코를 사용할 때 텔넷을 닫지 마십시오.

사용자 이름과 비밀번호를 제공하기 위해 에코를 사용할 때 텔넷을 닫지 마십시오.

로그인하기 위해 텔넷에 사용자 이름과 비밀번호를 제공하면 다음 명령을 실행한 후 자동으로 닫힙니다.

echo password | telnet mymachine -l mysuername

콘솔 출력:

Connected to mymachine.
Connection closed by foreign host.

그런 다음 연결이 닫힙니다. 한 번 로그인할 때 사용자 이름과 비밀번호를 제공하면서 연결 상태를 유지할 수 있는 방법이 있습니까?

업데이트: 매번 사용자 이름과 비밀번호를 입력하지 않고도 로그인하기 위해 허용된 답변을 기반으로 별칭을 작성했습니다.

alias logon='rm loginscript; echo \#\!\/usr\/bin\/expect >> loginscript ; echo spawn telnet remotemachine -l username >> loginscript ; echo expect Password: >> loginscript ; echo send password"\\r" >> loginscript ; echo expect -- \{\$ \} >> loginscript ; echo interact >> loginscript; chmod 777 loginscript; ./loginscript'

답변1

대화형 세션을 계속하려는 경우 일반적인 방법은 다음을 expect사용하여 로그인하는 것입니다.

#!/usr/bin/expect
spawn telnet mymachine -l myusername
expect Password:
send password\r
expect -- {$ }
interact

답변2

비밀번호를 보낸 후에도 세션과 계속 상호작용하고 싶다면 telnet로컬 터미널에서 세션에 대한 입력을 제공해야 합니다.

(echo password; cat) | telnet -l user host

구현이 로컬 터미널과 상호 작용을 시도하는 방법에 따라 telnet다음을 수행해야 할 수도 있습니다.

saved=$(stty -g); stty raw -echo
(echo password; cat) | telnet -l user host
stty "$saved"

심지어:

saved=$(stty -g); stty raw -echo
(echo password; cat) | telnet -l user host 2>&1 | cat
stty "$saved"

cat -u(일부 시스템에서는 대체 해야 할 수도 있습니다 cat)

또 다른 옵션은사용expect파이프 대신 의사 터미널을 사용하여 애플리케이션과 상호 작용합니다( telnetd다른 쪽 끝에서도 pty를 생성하므로 이 경우 추가 pty가 반드시 필요하지는 않습니다).

관련 정보