我正在尝试编写一个部署脚本,在将新版本复制到服务器之后,应该在远程计算机上执行一些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但没有帮助。任何帮助都非常感谢。
答案 0 :(得分:0)
我会做什么:
ssh stefan@nuc bash -s foobar <<'EOF'
echo "arg1 is $1"
echo "$HOSTNAME"
ifconfig
exit
EOF
经过测试,效果很好。
bash -s
参数的位置。检查我如何通过它-tt
sudo
执行ifconfig
并更好地使用ip a
答案 1 :(得分:0)
我提出了另一个解决方案:使用脚本创建另一个文件以在远程服务器上执行。然后使用scp复制它,并在调用脚本中执行
ssh -t remoteserver sudo /tmp/deploy_remote.sh parameter1
这可以按预期工作。当然,单独的文件不是最优雅的解决方案,但是在内联脚本以在远程计算机上执行时,-t和-tt不起作用。