【问题标题】:Running sudo via ssh on remote server在远程服务器上通过 ssh 运行 sudo
【发布时间】:2018-02-28 13:20:17
【问题描述】:

我正在尝试编写一个部署脚本,在将新版本复制到服务器后应该在远程机器上执行一些 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 标志,并为 sudo 使用 -S,但这没有帮助。非常感谢任何帮助。

【问题讨论】:

  • Ansible 在这里会有很大帮助
  • 对于我的用例,我真的对此表示怀疑。我不得不来处理它,只是将一个罐子复制到一个特定的位置并重新启动这个过程......

标签: bash ssh sudo


【解决方案1】:

我会做什么:

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

经过测试,运行良好。

注意事项:

【讨论】:

  • 附带说明,如果 OP 坚持使用基于密码的身份验证,他们可以使用 sshpass
  • 感谢您的回复。事实上,我已经在使用 ssh 密钥对了。 ifconfig 不幸的是只是一个示例命令(实际上在 Debian 上需要 sudo,否则找不到该命令)。我需要移动一个需要 sudo 的文件。在上面的 ifconfig 前面添加 sudo 会产生“sudo:不存在 tty 且未指定 askpass 程序”。将 -t 添加到 ssh 会导致“不会分配伪终端,因为 stdin 不是终端”。添加第二个 t 会导致上述原始问题中描述的行为。
  • 如果您需要传递密码,您可以使用-tt。如果你想要它没有密码,你必须在服务器端配置sudovisudo
  • 我不想让它没有密码。而且 -tt 不幸的是不起作用。
  • 所以ssh到root@nuc以避免在使用脚本时需要进入交互模式(如果是ubuntu,你需要root密码)
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 1970-01-01
    • 2016-11-27
    • 2019-05-02
    • 2013-11-22
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多