在ssh上运行sudo命令

时间:2016-02-26 01:50:40

标签: bash shell

我需要在ssh上运行sudo命令: -

ssh ${SSH_SERVER} -l "sudo <command>" 

我想在脚本中输入密码并将其提供给sudo - 比如。

export PASSWORD=<From user>
ssh ${SSH_SERVER} -l "sudo <command> | echo $PASSWORD"

我无法编写这样的脚本并需要帮助。

bash -version GNU bash,版本4.1.2(1)-release(x86_64-redhat-linux-gnu) 版权所有(C)2009 Free Software Foundation,Inc。 许可证GPLv3 +:GNU GPL版本3或更高版本http://gnu.org/licenses/gpl.html

===== EDIT ===================

我尝试了下面给出的建议,但收到了错误。

[user@my-host ~]$ cat temp.sh 
#!/bin/bash -xv
function f1 {
### Do NOT indent these lines until end comment ###
cat > /tmp/$HOSTS-pw.sh <<EOS
#!/bin/sh -xv
ssh -q -tt $HOSTS sudo "sudo ls" <<EOC
$SUDOPW
EOC
EOS
### End Comment ###
 
    chmod 700 /tmp/$HOSTS-pw.sh
    /tmp/$HOSTS-pw.sh >/dev/null
    if [ -f /tmp/$HOSTS-pw.sh ]; then rm -f /tmp/$HOSTS-pw.sh; fi
 
}
 
export HOSTS="destination.host"
 
echo "Enter SUDO password:"
read -s SUDOPW
 
f1
 
unset SUDOPW
exit 0
[user@my-host ~]
[user@my-host ~]
[user@my-host ~]
[user@my-host ~]$ ./temp.sh 
#!/bin/bash -xv
 
function f1 {
 
### Do NOT indent these lines until end comment ###
cat > /tmp/$HOSTS-pw.sh <<EOS
#!/bin/sh -xv
ssh -q -tt $HOSTS sudo "sudo ls" <<EOC
$SUDOPW
EOC
EOS
### End Comment ###
 
    chmod 700 /tmp/$HOSTS-pw.sh
    /tmp/$HOSTS-pw.sh >/dev/null
    if [ -f /tmp/$HOSTS-pw.sh ]; then rm -f /tmp/$HOSTS-pw.sh; fi
 
}
 
export HOSTS="destination.host"
+ export HOSTS=destination.host
+ HOSTS=destination.host
 
echo "Enter SUDO password:"
+ echo 'Enter SUDO password:'
Enter SUDO password:
read -s SUDOPW
+ read -s SUDOPW
 
f1
+ f1
+ cat
+ chmod 700 /tmp/destination.host-pw.sh
+ /tmp/destination.host-pw.sh
#!/bin/sh -xv
ssh -q -tt destination.host sudo "sudo ls" <<EOC
My-password
EOC
+ ssh -q -tt destination.host sudo 'sudo ls'
tcgetattr: Inappropriate ioctl for device
+ '[' -f /tmp/destination.host-pw.sh ']'
+ rm -f /tmp/destination.host-pw.sh
 
unset SUDOPW
+ unset SUDOPW
exit 0
+ exit 0

1 个答案:

答案 0 :(得分:1)

这是一个基本shell,用于在ssh上运行各种sudo命令,而无需以明文或shell历史记录发送密码。临时文件在您自己的主机上创建和删除。

另外,根据命令和情况,您还可以使用nopasswd在sudoers文件中为特定命令添加帐户。我希望这有帮助。我提供了更多信息,我可以提供更多帮助。

#!/bin/bash

function() {

    if "something" ;
        then

### Do NOT indent these lines until end comment ###
cat > /tmp/$HOSTS-pw.sh <<EOS
#!/bin/sh
ssh -q -tt user@$HOSTS sudo "your command here" <<EOC
$SUDOPW
EOC
EOS
### End Comment ###

    chmod 700 /tmp/$HOSTS-pw.sh
    /tmp/$HOSTS-pw.sh >/dev/null
    if [ -f /tmp/$HOSTS-pw.sh ]; then rm -f /tmp/$HOSTS-pw.sh; fi

    else
        echo "some thing"

    fi
}

echo "Enter SUDO password:"
read -s SUDOPW

for loop here function; done

unset SUDOPW
exit 0