SSH 원격 파일 실행이 작동하지 않습니다

SSH 원격 파일 실행이 작동하지 않습니다

test.sh다음 명령이 포함된 bash 스크립트가 있습니다.

#!/bin/bash

PASSWORD=""
USERNAME=""
REM_HOSTNAME='localhost'

FILES_TO_COPY="remote_exec.sh"


function scptmp {
    exec sshpass -p $PASSWORD scp -o "ConnectTimeout 3" \
        -o "StrictHostKeyChecking no" \
        -o "UserKnownHostsFile /dev/null" \
        "$@"
}

echo -e "\tCopying files to remote host..."
scptmp -r -q $FILES_TO_COPY $USERNAME@$REM_HOSTNAME:/tmp

echo -e "\tSet execution privs on remote file..."
sshpass -p "$PASSWORD" ssh -t -oStrictHostKeyChecking=no $USERNAME@$REM_HOSTNAME "echo $PASSWORD | sudo -S chmod +x /tmp/$FILES_TO_COPY"

echo -e "\Execute..."
sshpass -p "$PASSWORD" ssh -oStrictHostKeyChecking=no -t $USERNAME@$REM_HOSTNAME "echo $PASSWORD | sudo -S bash /tmp/$FILES_TO_COPY"

그리고 remote_exec.sh다음 내용을 포함합니다:

#!/bin/bash

hostname=`hostname`
mkdir $hostname

내가 스크립트를 실행할 때

bash test.sh

오류는 발생하지 않지만 remote_exec.sh디렉터리가 생성되지 않아 호스트에서 실행되지 않는 것 같습니다.

문제가 무엇인지 아는 사람이 있습니까?

답변1

를 사용하면 exec현재 셸을 다음 명령을 실행하여 생성된 프로세스로 바꿉니다. 즉 scptmp, 함수를 호출하면 현재 스크립트를 실행 중인 셸이 프로세스로 대체됩니다 sshpass. sshpass함수의 유틸리티 실행이 완료되면 스크립트는 더 이상 실행되지 않습니다 .

답변2

작은따옴표는 그 안에 있는 변수의 평가를 금지합니다. 큰따옴표를 사용해 보세요.

sshpass -p $PASSWORD ssh -t user@host "echo $PASSWORD | sudo -S bash /tmp/remote_exec.sh"

답변3

제 경우에는 스크립트를 실행하는 사용자와 처음으로 리모콘에 연결했습니다. 따라서 다음을 시도하십시오.

SSH <REMOTE_IP>

영향을 받은 사용자와 함께. "호스트의 신뢰성"에 대한 메시지가 나타나면 이것이 문제일 수 있습니다.

The authenticity of host '<REMOTE-IP>' can't be established.
Are you sure you want to continue connecting (yes/no)? yes

환경과 정책에 따라 스크립트를 확인하고 다시 시작할 수도 있습니다.

답변4

다음을 시도해 보세요:

sshpass -p $PASSWORD ssh -t user@host<<EOF
echo uname -a
cd /tmp/ || exit 1
echo $PASSWORD | sudo -S bash ./remote_exec.sh
exit $?

EOF

관련 정보