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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在远程服务器上通过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

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

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

答案

我会怎么做:

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
另一答案

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

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

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

以上是关于在远程服务器上通过ssh运行sudo的主要内容,如果未能解决你的问题,请参考以下文章

通过ssh远程执行命令导入定时任务报错----解决过程

ubuntu 服务器允许远程连接

如何通过ssh在服务器上启动jupyter笔记本并在本地浏览器上运行?

可以在 ssh 上使用 sudo 进行编辑的文本编辑器?

远程运行 qemu(通过 ssh)

通过 ssh 在远程服务器上执行命令