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 脚本进行此类更改?
获取原始文件并将其另存为sshd_config.orig.
编辑sshd_config您的内心。
跑
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,例如,请参阅本教程。