You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chef属性中换行符未解析为实际换行的解决方法咨询

解决Chef Recipe中属性换行符未解析的问题

这个问题我之前也碰到过,核心原因是Ruby对字符串转义的处理规则,以及属性定义方式的问题。下面给你几个靠谱的解决办法:

方法一:确保使用双引号定义属性

如果你的属性是用单引号包裹的,Ruby会把\n当作普通的文本字符而不是换行符。所以首先检查你的属性定义,确保用双引号:

default['ssh_private_key'] = "-----BEGIN RSA PRIVATE KEY-----\nline1\nline2\n-----END RSA PRIVATE KEY-----"

不过这种方式对于长字符串(比如完整的SSH密钥)来说,手动加\n容易出错,可读性也差,更推荐下面的方法。

方法二:使用Ruby Here文档(推荐)

Here文档可以让你直接编写多行文本,不需要手动添加转义符,Ruby会自动保留所有换行和格式,非常适合定义SSH密钥这类多行内容:

default['ssh_private_key'] = <<-SSH_KEY
-----BEGIN RSA PRIVATE KEY-----
line1
line2
-----END RSA PRIVATE KEY-----
SSH_KEY

注意最后一行的SSH_KEY要顶格写,而且要和开头的标识符完全一致(大小写敏感),这样中间的内容会被原样解析为带换行的字符串。

方法三:处理外部来源的字面量换行符

如果你的SSH密钥属性是从数据袋、环境变量或者其他外部来源获取的,其中的\n是字面量(也就是实际存储的是\\n),可以在File资源里手动替换:

File '/tmp/private_ssh_key' do
  action :create
  owner 'root'
  group 'root'
  mode '0640'
  sensitive true
  content node['ssh_private_key'].gsub('\n', "\n")
end

这个gsub方法会把字符串中所有的字面量\n替换成实际的换行符。

试试上面的方法,应该就能生成你预期的多行格式密钥文件了。

内容的提问来源于stack exchange,提问作者Angelo SR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:57