繁体   English   中英

用于更新 ssl.conf 中 ssl 证书文件的路径的 Bash 脚本

[英]Bash script to update path to ssl certificate file in ssl.conf

我正在创建一个可重用的脚本,用于在服务器设置上自动设置新的 SSL。 我有几行需要更新文件路径。

ssl.conf 文件中的默认值如下所示(一个带有前导 # 标签):

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

我需要在 bash 脚本中动态设置它,以这样结束:

SSLCertificateFile /etc/pki/tls/certs/example.crt

到目前为止,我是从这个开始的,但我不确定我在做什么。

~/update_ssl_conf.sh

代码:

#!/bin/bash
SSL_CONFIG_PATH="/etc/httpd/conf.d/ssl.conf"

SSL_DEFAULT_CERT_PATH="SSLCertificateFile /etc/pki/tls/certs/localhost.crt"
SSL_CERT_PATH="SSLCertificateFile /etc/pki/tls/certs/example.crt"
sed "s/.*\b$SSL_DEFAULT_CERT_PATH\b.*/$SSL_CERT_PATH/" $SSL_CONFIG_PATH

***更新区域,还需要 sed 命令来更新以 # 开头的行。

ssl.conf 文件中的默认值如下所示(具有前导 # 标记):

#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

我需要在 bash 脚本中动态设置它,以这样结束:

 SSLCACertificateFile /etc/pki/tls/certs/example-ca-bundle.crt

到目前为止,我是从这个开始的,但我不确定我在做什么。

~/update_ssl_conf.sh

代码:

#!/bin/bash
SSL_CONFIG_PATH="/etc/httpd/conf.d/ssl.conf"

SSL_DEFAULT_CA_CERT_PATH="#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt" 
SSL_CA_CERT_PATH="SSLCACertificateFile /etc/pki/tls/certs/example-ca-bundle.crt"

我从公认的解决方案中尝试过

sed -i "s|.*\b#$SSL_DEFAULT_CA_CERT_PATH\b.*|$SSL_CA_CERT_PATH|" SSL_CONFIG_PATH

sed -i "s|(?s).*(?<!\\w)$SSL_DEFAULT_CA_CERT_PATH(?!\\w).*|$SSL_CA_‌​CERT_PATH|" $SSL_CONFIG_PATH

两者都不起作用,因为正则表达式不正确。

问题在于斜线。 您的变量包含它们,最终命令将有多个正斜杠,这会影响您的原始sed语法 s/ <search>/<replace/语法。 只需将您的sed单词分隔符从/更改为| (或任何其他字符,例如说@~ )来修复它。

sed -i "s|.*\b$SSL_DEFAULT_CERT_PATH\b.*|$SSL_CERT_PATH|" file

应该可以解决您的问题并使用-i标志进行就地替换并使用-i.bak<filename>.bak格式保存文件的备份

GNU sedman页说

/ 字符可以统一替换为任何给定 s 命令中的任何其他单个字符。 / 字符(或任何其他代替它的字符)只能出现在正则表达式或替换中,前提是它前面有一个 \\ 字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM