我正在尝试通过root自动禁用登录SSH。我知道我可以手动编辑文件并执行此操作,但我想通过Bash脚本(我用来初始化服务器)禁用root登录。
我还没有使用sed
,但我认为它应该基于this question使用。
我要在/etc/ssh/sshd_config
中替换的行是PermitRootLogin {any_value}
。 {any_value}
的默认值为yes
,但我希望这适用于任何值(在同一行)。
我尝试了sudo sed -i "/PermitRootLogin/c\PermitRootLogin no" /etc/ssh/sshd_config
命令,但这也取代了包含文本" PermitRootLogin"的随机注释。
因此,我不想替换以评论标记#
开头的行。
以下是我要编辑的文件的相关部分(我的评论添加了" ###"):
# Authentication:
LoginGraceTime 120
PermitRootLogin yes ### I want to replace this line with "PermitRootLogin no"
StrictModes yes
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
预期输出为:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
然后,我尝试了这个:sed -i "\(^[\# ]\)+/PermitRootLogin/c\PermitRootLogin no" /etc/ssh/sshd_config
。
这给了我一个错误:sed: -e expression #1, char 48: unterminated address regex
。
我怎样才能完成我想做的事情?谢谢!
答案 0 :(得分:3)
尝试
sed -i "s/^[^#]*PermitRootLogin .*/PermitRootLogin no/g" file
^: Beginning of line
[^#]*: any character but no #
答案 1 :(得分:2)
您可以使用:
public void setTableAlignment(XWPFTable table, STJc.Enum justification) {
CTTblPr tblPr = table.getCTTbl().getTblPr();
CTJc jc = (tblPr.isSetJc() ? tblPr.getJc() : tblPr.addNewJc());
jc.setVal(justification);
}
模式sed '/^#/!s/PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
匹配以注释开头的行。 /^#/
否定匹配意味着后续命令将仅在非注释行上执行。
替代评论将!
替换为PermitRootLogin
.*
后的PermitRootLogin no
。
一旦确定它正常工作,请使用-i
。
答案 2 :(得分:2)
尝试使用GNU sed:
sed -i 's/^PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config