다른 사용자로 SSH를 통해 원격으로 매개변수를 전달하여 로컬 스크립트를 실행하는 방법은 무엇입니까?

다른 사용자로 SSH를 통해 원격으로 매개변수를 전달하여 로컬 스크립트를 실행하는 방법은 무엇입니까?

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 고양이"

관련 정보