!["ssh 호스트 bash"에는 "-t"가 필요하지만 "ssh 호스트"는 bash를 잘 실행하는 이유는 무엇입니까?](https://linux55.com/image/120957/%22ssh%20%ED%98%B8%EC%8A%A4%ED%8A%B8%20bash%22%EC%97%90%EB%8A%94%20%22-t%22%EA%B0%80%20%ED%95%84%EC%9A%94%ED%95%98%EC%A7%80%EB%A7%8C%20%22ssh%20%ED%98%B8%EC%8A%A4%ED%8A%B8%22%EB%8A%94%20bash%EB%A5%BC%20%EC%9E%98%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이 작업을 수행하면 ssh host
로그인 host
한 다음 bash가 실행됩니다. 하지만 ssh host bash
내가 그렇게 하면 그것은 아무 일도 하지 않는 것처럼 그냥 거기 앉아 있습니다. 사용 가능한 bash 프롬프트를 얻으려면 -t
다음과 같은 것을 제공해야 합니다 ssh -t host bash
.
실제로는 그냥 거기 앉아서 아무것도 하지 않습니다. 이 작업을 수행하면 ssh host bash
(nothing -t
) 작동하는 bash가 표시되는 것처럼 보이지만 프롬프트는 표시되지 않습니다. echo foo
또는 같은 명령을 실행할 수 ps -ef
있으며 사용 가능한 출력을 얻을 수 있습니다. 프롬프트가 없습니다.
bash 프롬프트가 작동해야 하는데 -t
bash 가 제대로 작동하는 이유는 무엇입니까 ?ssh host bash
ssh 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 포트에 있음)가 호출되었습니다.rlogin
rlogin
rsh