BASH脚本SSH到另一台服务器并以用户身份运行命令

时间:2015-06-20 16:22:44

标签: bash ssh cpanel

我通过论坛和谷歌阅读了很多内容但是我找不到这个特定的解决方法。

基本上我的脚本在我的本地机器上运行,然后通过SSH连接到具有不同用户名的服务器上(直到这里工作),并且在那台机器上我需要运行一些命令(它们不运行)

以下是代码中不起作用的部分:

if [[ "${TYPE}" == "cPanel" ]]; then

        #Connect to the server with credentials defined earlier in the script - works properly.
        ssh $USER@$HOST -p $PORT

        #Get the domain by the username - works properly
        user=$(sudo grep ${DOM} /etc/userdomains)

        #Extract only the username from the above string - works properly
        userNew=$(echo ${user} | awk 'END {print $NF}')

        #Log in as the new username - works properly
        sudo su -s /bin/bash ${userNew}

fi

这是一个cPanel服务器,我需要以cPanel用户之一登录。

请帮助。

P.S。当运行到cPanel服务器本身时,上面的脚本正常运行。它仅在我本地计算机上调用SSH脚本时才起作用。

2 个答案:

答案 0 :(得分:1)

如果要在远程服务器上运行该命令,则需要将它们放在SSH命令的末尾。您的脚本目前正在使用SSH连接到远程服务器,但之后只给您一个交互式shell。

你需要这样的东西:

ssh $USER@$HOST -p $PORT <command to execute>

答案 1 :(得分:1)

使用here document

if [[ "${TYPE}" == "cPanel" ]]; then
  ssh $USER@$HOST -p $PORT << \EOF

    #Get the domain by the username - works properly
    user=$(sudo grep ${DOM} /etc/userdomains)

    #Extract only the username from the above string - works properly
    userNew=$(echo ${user} | awk 'END {print $NF}')

    #Log in as the new username - works properly
    sudo su -s /bin/bash ${userNew}
EOF
fi