keytab 인증을 사용하여 SSH를 통해 원격 서버에서 로컬 스크립트를 실행하려고 합니다. sachin(티켓을 받은 사용자)으로 원격으로 SSH를 통해 연결할 수 있었고 그런 다음 다른 사용자인 Remoteuser로 bash 프로세스를 생성했습니다. 여태까지는 그런대로 잘됐다. 이것은 명령이다
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -l sachin sachin@remote_host 'sudo -u remoteuser /bin/bash' < ./hello.sh
문제는 hello.sh에 인수를 전달하려고 할 때 시작됩니다. 나는 다음을 시도했다
ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no -l sachin sachin@remote_host 'sudo -u remoteuser /bin/bash' < ./hello.sh "hello"
알겠어요
/bin/bash: hello: Permission denied.
그러나 매개변수가 없으면 스크립트는 원격 사용자로 실행됩니다. 그래서 특별한 허가는 필요하지 않다고 생각합니다.
hello.sh는 간단한 쉘 스크립트입니다.
#!/bin/bash
echo $1
무슨 문제가 있는지 아시나요?
답변1
스크립트에 인수로 전달 하려는 것처럼 보이지만 "hello"
셸에 명령줄 인수로 제공하지 않습니다.
대신 표준 입력으로 스크립트를 전달하려면 를 bash
사용하세요 bash -s
. 또한 다음과 같은 추가 명령줄 인수를 전달할 수도 있습니다 bash -s "hello"
.
ssh ...options... 'sudo -u remoteuser /bin/bash -s "hello"' <./hello.sh
그러나 이렇게 하면 쉘의 표준 입력 스트림이 쉘 스크립트가 되어 스크립트 자체 내의 표준 입력에서 데이터를 읽는 것이 어려워집니다.
분명히 또 다른 옵션은 스크립트를 원격 시스템으로 전송하고 그곳에서 실행하는 것입니다.
주문
ssh ...options... 'sudo -u remoteuser /bin/bash' <./hello.sh "hello"
그리고
ssh ...options... 'sudo -u remoteuser /bin/bash' "hello" <./hello.sh
여기서는 회선의 리디렉션 위치가 중요하지 않습니다. 예를 들어 참조하십시오.이 명령은 어떻게 적법합니까? "> 파일 1 < 파일 2 고양이"