Удаленное выполнение файлов по ssh не работает

Удаленное выполнение файлов по ssh не работает

У меня есть bash-скрипт test.sh, содержащий следующие команды

#!/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

Связанный контент