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,您可以將目前 shell 替換為執行下列命令所產生的進程。這表示當您呼叫scptmp函數時,目前正在執行腳本的 shell 將被進程取代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

相關內容