如何对纯文本配置文件进行编码,然后将其“tee”到其目的地?

如何对纯文本配置文件进行编码,然后将其“tee”到其目的地?

nginx.conf我有一个纯文本格式的Nginx ( ) 配置。它有拉丁字符、空格缩进,总共约 250 行。我在从源代码编译 Nginx 时使用它。编译源代码后,我使用文本编辑器创建 (空) nginx.conf,然后复制并粘贴普通配置,保存它,然后弹起 Nginx 以使用普通配置。与构建过程的自动化组件一起,复制并粘贴到编辑器中的操作有点麻烦。

普通配置文件对我来说是本地的(至少在可预见的将来),而不是在线的。因此,这构成curlwget禁止。理想情况下,我希望将我的香草编码nginx.conf为单个字符串,然后tee(或类似)将其编码到服务器端nginx.conf,绕过打开-复制-粘贴-保存-退出舞蹈。

工作流程将是:

  1. 获取并编译 Nginx 源码

  2. 搭建Nginx脚手架

  3. nginx.conf通过将预编码字符串输入tee(或类似)自动创建

  4. 反弹 Nginx

请问我该如何进行第 3 步?

答案1

如果您想使用tee远程服务器

ssh user@remote tee /path/to/nginx.conf < local-nginx.conf

这假定远程/path/to/nginx.conf用户可以写入远程内容。

附加> /dev/null以抑制标准输出。

答案2

一条评论您解释说您在远程服务器上构建了 Nginx 应用程序(通过 连接ssh),但您已将nginx.conf配置文件保存在本地计算机上。

在这种情况下,使用scp从本地机器到远程系统直接复制配置文件:

ssh rUser@rHost                              # Connect to remote system
… build nginx etc …

scp my_nginx.conf rUser@rHost:nginx.conf    # Copy from current directory to $HOME on remote

该命令采用到目标的可选路径(如果路径不以 开头,则scp相对于远程用户的路径)。如果您没有直接写入目标文件的权限(并且您不能),则可以使用with代替。但这更难看,因为我们不能简单地通过管道传输$HOME/scproot@rHostsshsudo标准输入并且还允许输入密码sudo

scp my_nginx.conf rUser@rHost:/tmp/nginx.conf.$$ &&
    ssh -t rUser@rHost "sudo sh -c 'cat /tmp/nginx.conf.$$ >/etc/nginx.conf'; rm -f /tmp/nginx.conf.$$"

如果需要的话,该ssh … sudo sh -c '…'构造也提供了重新启动 Nginx 的空间

相关内容