注释、取消注释、根据字符串更改设置、从终端添加行

注释、取消注释、根据字符串更改设置、从终端添加行

我必须编辑一些文件来取消注释一行、更改该行上的值或取消注释一行。我正尝试通过 bash 脚本执行此操作。

我正在尝试编辑/etc/ssh/sshd_config和更改

IgnoreRhosts yes
#RhostsRSAAuthentication no

IgnoreRhosts no
RhostsRSAAuthentication no

并改变

#PermitRootLogin yes

PermitRootLogin no
AllowUsers mroberts

并编辑/etc/pam.d/system-auth文件以便更改

password sufficient pam_unix.so try_first_pass use_authtok nullok md5

password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow

我还需要将此行添加到/etc/pam.d/system-auth文件中:

/etc/pam.d/system-auth file password required pam_unix.so remember=10

我一直使用手动方式完成所有这些操作vi,并且我可以通过该编辑器进行更改。但是,我必须在很多主机上执行此过程,并且无法一次在一台主机上重复该过程。我犯了一个错误,忘记添加AllowUsers mroberts,导致被锁定在主机之外近 36 小时。

我不知道如何搜索一行并更改其中的一部分而不是整行。

有没有办法从终端或通过 bash 脚本进行这样的更改?

答案1

一次做出多项改变

  1. 取出原始文件并将其保存为sshd_config.orig

  2. sshd_config按照您喜欢的内容进行编辑。

  3. 跑步

    diff sshd_config.orig sshd_config >config.patch
    

    将文件保存config.patch在安全的地方。

现在,只要您有新的未编辑版本sshd_config并且想要应用相同的编辑,请运行:

patch sshd_config /path/to/config.patch

这会将相同的编辑应用于新文件,或者如果存在某些不一致之处而没有您的帮助就无法解决,则会向您发出警告。

进行个别更改

Unix 还具有强大的命令行工具,无需编辑器即可更改文件。

使用sed,例如:

sed -i.bak 's/IgnoreRhosts yes/IgnoreRhosts no/' sshd_config

或者,使用 GNU awk 执行相同的更改:

gawk -i inplace '$1=="IgnoreRhosts" {$2="no"} 1' sshd_config

patch方法可让您轻松地同时进行多项更改。对于较少数量的更改,sedawk使用 Excel。要了解有关 的更多信息sed,请参阅,例如本教程。要了解更多信息awk,请参阅本教程

相关内容