I am trying to automatically disable logging into SSH via root. I know I can manually edit the file and do so, but I want to disable root login through a Bash script (that I use to initialize my servers).
I haven't used sed
much, but I think it's what I should used based off of this question.
The line I am trying to replace, in /etc/ssh/sshd_config
, is PermitRootLogin {any_value}
. The default value of {any_value}
is yes
but I would like this to work for any value (on the same line).
I tried the command sudo sed -i "/PermitRootLogin/c\PermitRootLogin no" /etc/ssh/sshd_config
but this also replaces a random comment that contains the text "PermitRootLogin".
So, I don't want to replace lines that begin with a comment token, #
.
Here is the relevant parts of the file I am trying to edit (my comments are added with "###"):
# 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
The expected output is:
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
Then, I tried this: sed -i "\(^[\# ]\)+/PermitRootLogin/c\PermitRootLogin no" /etc/ssh/sshd_config
.
This gives me an error of: sed: -e expression #1, char 48: unterminated address regex
.
How can I accomplish what I am trying to do? Thank you!