使用 augtool,如何添加 SSH 子系统,或者更新已存在的子系统?

使用 augtool,如何添加 SSH 子系统,或者更新已存在的子系统?

给定一个包含以下配置的 sshd_config 文件:

Subsystem   sftp /usr/lib/openssh/sftp-server
Subsystem   fooftp /usr/lib/openssh/fooftp-server
Subsystem   barftp /usr/lib/openssh/barftp-server

如何augtoola) 如果 snmp 不存在,则添加该条目;如何 b) 如果 snmp 已存在,则更新现有条目augtool

我发现可以像这样访问现有条目:

/files/etc/ssh/sshd_config/Subsystem[1]/sftp
/files/etc/ssh/sshd_config/Subsystem[2]/fooftp
/files/etc/ssh/sshd_config/Subsystem[3]/barftp

并且可以像这样添加新条目:

/files/etc/ssh/sshd_config/Subsystem[4]/bazftp

但是上面的 4 是一个神奇的数字,因此没用。

是否augtool有可以提供帮助的语法?

可能的现有配置示例如下:

augtool> print /files/etc/ssh/sshd_config/Subsystem
/files/etc/ssh/sshd_config/Subsystem[1]
/files/etc/ssh/sshd_config/Subsystem[1]/sftp = "/usr/libexec/openssh/sftp-server"
/files/etc/ssh/sshd_config/Subsystem[2]
/files/etc/ssh/sshd_config/Subsystem[2]/snmp = "/usr/bin/sshtosnmp /var/lib/net-snmp/sshdomainsocket"

https://github.com/hercules-team/augeas/pull/706在 augeas v1.13.0 中添加的内容表明 + 运算符可以提供帮助,但是不清楚如何匹配上面的选项 2。

注意:使用其他工具并不能回答这个问题。

答案1

如果要幂等地创建一个条目(如果该条目不存在)/更新一个条目(如果该条目已存在),请执行以下操作:

augtool> set /files/etc/ssh/sshd_config/Subsystem[foo]/foo 'something new'
augtool> print /files/etc/ssh/sshd_config/Subsystem
/files/etc/ssh/sshd_config/Subsystem[1]
/files/etc/ssh/sshd_config/Subsystem[1]/sftp = "/usr/libexec/openssh/sftp-server"
/files/etc/ssh/sshd_config/Subsystem[2]
/files/etc/ssh/sshd_config/Subsystem[2]/snmp = "/usr/bin/sshtosnmp /var/lib/net-snmp/sshdomainsocket"
/files/etc/ssh/sshd_config/Subsystem[3]
/files/etc/ssh/sshd_config/Subsystem[3]/foo = "something new"
augtool> 

该语法Subsystem[foo]将选择索引为“foo”的条目,如果它不存在则创建它,然后我们使用为这个新节点分配一个值Subsystem[foo]/foo 'something new'

如果节点“foo”已经存在,它将被更新。

要撤消已完成的操作,请像这样删除节点:

augtool> rm /files/etc/ssh/sshd_config/Subsystem/foo

来源:https://github.com/hercules-team/augeas/issues/68#issuecomment-1282915936

相关内容