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

ede*_*esz 5 server ssh command-line bash

我必须编辑一些文件以取消注释一行、更改该行上的值或取消注释一行。我正在尝试通过 bash 脚本来做到这一点。

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

IgnoreRhosts yes
#RhostsRSAAuthentication no
Run Code Online (Sandbox Code Playgroud)

IgnoreRhosts no
RhostsRSAAuthentication no
Run Code Online (Sandbox Code Playgroud)

和改变

#PermitRootLogin yes
Run Code Online (Sandbox Code Playgroud)

PermitRootLogin no
AllowUsers mroberts
Run Code Online (Sandbox Code Playgroud)

并且还编辑/etc/pam.d/system-auth文件以便从

password sufficient pam_unix.so try_first_pass use_authtok nullok md5
Run Code Online (Sandbox Code Playgroud)

password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow
Run Code Online (Sandbox Code Playgroud)

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

/etc/pam.d/system-auth file password required pam_unix.so remember=10
Run Code Online (Sandbox Code Playgroud)

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

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

有没有办法从终端或通过 bash 脚本进行此类更改?

Joh*_*024 5

一次进行许多更改

  1. 获取原始文件并将其另存为sshd_config.orig.

  2. 编辑sshd_config您的内心。

  3. diff sshd_config.orig sshd_config >config.patch
    
    Run Code Online (Sandbox Code Playgroud)

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

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

patch sshd_config /path/to/config.patch
Run Code Online (Sandbox Code Playgroud)

这将对新文件应用相同的编辑,或者在没有您的帮助下无法解决的不一致问题时向您发出警告。

进行个人更改

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

使用sed,例如:

sed -i.bak 's/IgnoreRhosts yes/IgnoreRhosts no/' sshd_config
Run Code Online (Sandbox Code Playgroud)

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

gawk -i inplace '$1=="IgnoreRhosts" {$2="no"} 1' sshd_config
Run Code Online (Sandbox Code Playgroud)

这种patch方法可以轻松地同时进行许多更改。对于较小数量的更改,sed以及awkexcel。要了解有关 的更多信息sed,例如,请参阅本教程。要了解有关 的更多信息awk,例如,请参阅本教程