在远程服务器上通过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的主要内容,如果未能解决你的问题,请参考以下文章