어떤 이유로 다음 인코딩이 필요한 기본 스크립트가 있습니다.
vi test_run.sh
#!/bin/sh
ssh -tt 192.168.1.20
내가 실행하는 명령을 실행하려면 다음을 수행하십시오.
cat test_run.sh | sh -
원격 서버에 연결할 수 있지만 을 ls
누르는 등의 명령을 실행할 수 없어 Enter화면이 멈추게 됩니다.
답변1
ssh
그것을 실행하는 쉘의 표준 입력 스트림을 상속합니다.
실행 중인 쉘의 표준 입력은 ssh
쉘 스크립트(파이프)를 읽는 데 사용되므로 cat
대화식으로 명령을 실행하는 데 사용할 수 없습니다 ssh
. 이것이 세션을 대화형으로 -tt
만들려고 하는 이유입니다( 그렇지 않으면 불평할 것입니다.ssh
ssh
stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.) 그러나 위에서 언급한 것처럼 사용된 스트림은 사용자의 명령을 공급하고 쉘은 해당 스트림을 사용하여 실제 스크립트를 읽기 때문에 작동하지 않습니다.
대신 평소대로 스크립트를 실행하세요.
sh test_run.sh
이렇게 하면 표준 입력 스트림을 사용하여 원격 셸 세션에 대화형으로 명령을 실행할 수 있으며 호출에는 ssh
전혀 필요하지 않습니다.-tt
스크립트가 약간 긴 경우:
#!/bin/sh
ssh -tt 192.168.1.20
hostname
echo "DONE"
당신이 그것을 실행하면
cat test_run.sh | sh -
hostname
이 두 가지를 모두 실행하는 기계 echo
는 실제로외딴기계. 이는 쉘의 표준 입력( cat
스크립트가 포함된 에서 읽은 스트림에 연결됨)이 에 전달되기 때문입니다 ssh
. 이는 스크립트의 명령을 원격 시스템에서 시작된 셸에 전달하는 효과가 있습니다(마치 원격 셸에 입력한 것처럼).