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

관련 정보