在远程服务器上通过ssh运行sudo

时间:2018-02-28 13:20:17

标签: bash ssh sudo

我正在尝试编写一个部署脚本,在将新版本复制到服务器之后,应该在远程计算机上执行一些sudo命令。

#!/bin/bash
app=$1
echo "Deploying application $app"
echo "Copy file to server"
scp -pr $app-0.1-SNAPSHOT-jar-with-dependencies.jar nuc:/tmp/
echo "Execute deployment script"
ssh -tt stefan@nuc ARG1=$app 'bash -s' <<'ENDSSH'
    # commands to run on remote host
    echo Hello world
    echo $ARG1
    sudo ifconfig
    exit
ENDSSH

正确复制文件并打印传递的参数。但密码的提示显示两秒钟,然后它说&#34;抱歉,再试一次&#34;并且第二个提示显示我以纯文本输入的文本(意思是未屏蔽),但如果我正确输入密码也不起作用。

stefan@X220:~$ ./deploy.sh photos
Deploying application photos
Copy file to server
photos-0.1-SNAPSHOT-jar-with-dependencies.jar                                         100%   14MB  75.0MB/s   00:00    
Execute deployment script
  # commands to run on remote host
  echo Hello world
  echo $ARG1
  sudo ifconfig
  exit
stefan@nuc:~$   # commands to run on remote host
stefan@nuc:~$   echo Hello world
Hello world
stefan@nuc:~$   echo $ARG1
photos
stefan@nuc:~$   sudo ifconfig
[sudo] password for stefan: 
Sorry, try again.
[sudo] password for stefan: ksdlgfdkgdfg

我尝试省略ssh的-t标志以及使用-S for sudo但没有帮助。任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:0)

我会做什么:

ssh stefan@nuc bash -s foobar <<'EOF'
echo "arg1 is $1"
echo "$HOSTNAME"
ifconfig
exit
EOF

经过测试,效果很好。

注意:

答案 1 :(得分:0)

我提出了另一个解决方案:使用脚本创建另一个文件以在远程服务器上执行。然后使用scp复制它,并在调用脚本中执行

ssh -t remoteserver sudo /tmp/deploy_remote.sh parameter1

这可以按预期工作。当然,单独的文件不是最优雅的解决方案,但是在内联脚本以在远程计算机上执行时,-t和-tt不起作用。