【问题标题】:Laravel Envoy to SSH into bastion server, then, SSH into individual private web servers, stdout is split into new linesLaravel Envoy 将 SSH 连接到堡垒服务器,然后,SSH 连接到单独的私有 Web 服务器,stdout 被拆分为新行
【发布时间】:2021-08-27 21:23:41
【问题描述】:

我们的基础设施/挑战很有趣,我在网上或其他 SO 问题上找不到任何太相关的内容。

我们的build 服务器与我们的私有网络服务器位于不同的 VPC 中。所以build > web server 是不可能的。我在本地使用两个 VirtualBox VM 进行概念验证,那里没有问题。使用两个虚拟机在本地一切正常。

我们的部署将是build > bastion > webserver

我正在编写一些将由 GitLab 的 CI 触发的 Envoy 脚本,其中:

  • SSH 到我们的build 服务器
  • 运行envoy run deploy:code --arg1=a --arg2=b --arg3=c
  • envoy 然后 SSH 进入我们的堡垒服务器
  • 运行另一个脚本(Envoy 最终 deploy.sh 现在)将代码部署到我们的私有 Web 服务器

VM1Envoy.blade.php:

@task('deploy:code', ['on' => 'web'])
    ssh ubuntu@10.0.2.15 -p 22 -tt
    /home/ubuntu/deploy.sh
@endtask

VM2deploy.sh:

$ cat deploy.sh
echo "hello!"

本地主机命令:

 envoy run deploy:code --a=a --b=b --c=c

输出:

[ubuntu@127.0.0.1 -p 10022]: /home/ubuntu/deploy.sh
[ubuntu@127.0.0.1 -p 10022]: Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-193-generic x86_64)
[ubuntu@127.0.0.1 -p 10022]: * Documentation:  https://help.ubuntu.com
[ubuntu@127.0.0.1 -p 10022]: * Management:     https://landscape.canonical.com
[ubuntu@127.0.0.1 -p 10022]: * Support:        https://ubuntu.com/advantage
[ubuntu@127.0.0.1 -p 10022]: 105 packages can be updated.
[ubuntu@127.0.0.1 -p 10022]: 86 updates are security updates.
[ubuntu@127.0.0.1 -p 10022]: New release '18.04.5 LTS' available.
[ubuntu@127.0.0.1 -p 10022]: Run 'do-release-upgrade' to upgrade to it.
[ubuntu@127.0.0.1 -p 10022]: Last login: Fri Aug 27 15:51:11 2021 from 10.0.2.15
[ubuntu@127.0.0.1 -p 10022]: ubuntu@ubuntu:~$
[ubuntu@127.0.0.1 -p 10022]: ubuntu@ubuntu:~$ /h
[ubuntu@127.0.0.1 -p 10022]: ome
[ubuntu@127.0.0.1 -p 10022]: /ub
[ubuntu@127.0.0.1 -p 10022]: un
[ubuntu@127.0.0.1 -p 10022]: tu/
[ubuntu@127.0.0.1 -p 10022]: depl
[ubuntu@127.0.0.1 -p 10022]: oy.
[ubuntu@127.0.0.1 -p 10022]: sh
[ubuntu@127.0.0.1 -p 10022]: hello!
[ubuntu@127.0.0.1 -p 10022]: ubuntu@ubuntu:~$

谁能建议我不能将输出拆分为多行,而是在欢迎消息/MOTD 之后回显hello!,和/或不将输出拆分为多行?

【问题讨论】:

    标签: laravel bash stdout stdin laravel-envoy


    【解决方案1】:

    星期一早上新鲜的眼睛把我带到了这里:

    https://unix.stackexchange.com/questions/572412/when-running-local-script-on-remote-server-via-multiple-ssh-script-is-split-int

    替换

    ssh ubuntu@10.0.2.15 -p 22 -tt
    

    ssh ubuntu@10.0.2.15 -p 22 -t
    

    原因:

    不会分配伪终端,因为 stdin 不是终端。

    后来厚脸皮的搜索,建议把-t改成-T

    https://appuals.com/fix-pseudo-terminal-will-not-be-allocated-because-stdin-is-not-a-terminal/

    ssh ubuntu@10.0.2.15 -p 22 -T
    

    成功了

    [ubuntu@127.0.0.1 -p 10022]: Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-193-generic x86_64)
    [ubuntu@127.0.0.1 -p 10022]: * Documentation:  https://help.ubuntu.com
    [ubuntu@127.0.0.1 -p 10022]: * Management:     https://landscape.canonical.com
    [ubuntu@127.0.0.1 -p 10022]: * Support:        https://ubuntu.com/advantage
    [ubuntu@127.0.0.1 -p 10022]: 105 packages can be updated.
    [ubuntu@127.0.0.1 -p 10022]: 86 updates are security updates.
    [ubuntu@127.0.0.1 -p 10022]: New release '18.04.5 LTS' available.
    [ubuntu@127.0.0.1 -p 10022]: Run 'do-release-upgrade' to upgrade to it.
    [ubuntu@127.0.0.1 -p 10022]: hello!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 2011-06-01
      • 2014-07-03
      • 2017-05-21
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多