我正在尝试自动配置/etc/ssh/sshd_config
文件中的某些参数,最值得注意的是
#PermitRootLogin yes
和
#LoginGraceTime 2m
他们应该阅读:
PermitRootLogin no
LoginGraceTime 60
我不是脚本高手,所以请耐心等待......
我尝试sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
开始滚动,但得到了一个奇怪的结果。它只是简单地显示了我正在尝试处理的文件......
有人可以直接让我使用 sed 吗?
答案1
将输出重定向到临时文件,然后将临时文件重命名为原始文件
sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
或者,如果您有 GNU,sed
您可以使用-i
就地编辑选项
sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
答案2
与@Bodo的答案类似,但此解决方案保持原始行不变,并将修改后的版本添加到原始行下方。仅当您想保留原始行作为注释时,这才有意义。
sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config
这里我们使用一个捕获组\(...\)
,它在替换中被替换\1
(因为我们懒得再次输入相同的字符串)。
带选项的 sed-n
仅输出显式打印的行,因此第一个p
命令用于打印未修改的行,接下来的两个命令用于打印修改的行。