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

问题描述 投票:0回答:2

我正在尝试编写一个部署脚本,在将新版本复制到服务器之后,应该在远程计算机上执行一些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

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

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但没有帮助。任何帮助都非常感谢。

bash ssh sudo
2个回答
0
投票

我会怎么做:

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

经过测试,效果很好。

备注:

  • 为了工作的技巧,use ssh key pair instead of using a password,它更安全
  • 照顾你的bash -s论点的地方。检查我如何通过它
  • 根本不需要-tt
  • 不需要sudo来执行ifconfig并且更好地使用ip a

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.