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

相关内容