"ssh 호스트 bash"에는 "-t"가 필요하지만 "ssh 호스트"는 bash를 잘 실행하는 이유는 무엇입니까?

"ssh 호스트 bash"에는 "-t"가 필요하지만 "ssh 호스트"는 bash를 잘 실행하는 이유는 무엇입니까?

이 작업을 수행하면 ssh host로그인 host한 다음 bash가 실행됩니다. 하지만 ssh host bash내가 그렇게 하면 그것은 아무 일도 하지 않는 것처럼 그냥 거기 앉아 있습니다. 사용 가능한 bash 프롬프트를 얻으려면 -t다음과 같은 것을 제공해야 합니다 ssh -t host bash.

실제로는 그냥 거기 앉아서 아무것도 하지 않습니다. 이 작업을 수행하면 ssh host bash(nothing -t) 작동하는 bash가 표시되는 것처럼 보이지만 프롬프트는 표시되지 않습니다. echo foo또는 같은 명령을 실행할 수 ps -ef있으며 사용 가능한 출력을 얻을 수 있습니다. 프롬프트가 없습니다.

bash 프롬프트가 작동해야 하는데 -tbash 가 제대로 작동하는 이유는 무엇입니까 ?ssh host bashssh host

답변1

실행할 때:

ssh host some    command

ssh원격 측에서 pseudo-tty 장치 사용을 요청하지 마십시오. stdout 및 stderr 또는 원격 명령은 파이프입니다. sshd달리다:

exec("remote-user-login-shell", ["remote-user-login-shell", "-c", "some command"])

이것이 rsh패턴이다. 명령을 지정하지 않으면 이 rlogin모드로 들어가 해당 모드에서 의사 터미널을 시작하고 다음을 실행하는 로그인 대화형 셸 세션을 실행합니다.

exec("remote-user-login-shell", ["-remote-user-login-shell"])

( -앞부분을 추가하면 argv[0]로그인 쉘로 작동할 것임을 쉘에 알립니다.)

-t특정 명령(예: bash또는 )을 대화형으로 실행해야 하는 경우 원격 호스트에 의사 터미널을 생성하여 원격 명령과 상호 작용 vi해야 합니다 .sshd그렇지 않다면 이렇게 하세요아니요사용하고 싶다-t.

존재하다:

ssh host bash

bash아무것도 하지 않고 단지 상호작용이 되지 않을 뿐입니다. 스크립트를 처리하는 것과 같은 방식으로 입력을 처리하거나 를 실행하는 것과 마찬가지로 cat | bash명령을 입력하고 출력을 볼 수 있습니다.

역사적으로 rsh(교체)는 ssh실행 명령이 주어지지 않았을 때 실제로 실행 중이었고 해당 서비스에서 다른 서비스(다른 TCP 포트에 있음)가 호출되었습니다.rloginrloginrsh

관련 정보