/etc/ssh/sshd_config
有没有办法通过终端中的一个命令来改变“PermitRootLogin”的值?
我想在不打开此文件的情况下更改其值,并将“PermitRootLogin”的值从是更改为否。
答案1
完全可以使用 来做到这一点sed
,匹配行并改变值:
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
^PermitRootLogin
匹配以PermitRootLogin
s/yes/no
将选项的值从“是”更改为“否”
答案2
我想将“PermitRootLogin”的值从是更改为否。
在这种情况下,我会使用 Perl(即,可以处理字段并可以就地编辑的东西; Sed 在第一个方面失败,而 AWK 在第二个方面失败):
sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user:
% grep ^PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no
答案3
您可以使用 sed 更改它们,使用 -i 选项
sed -i -e 's/old/new/g' file
详细信息请参阅 man sed
答案4
open()
任何以任何方式处理文件的程序都必须发出read()
系统调用,这可以通过 进行验证strace
。如果没有这些系统调用,打开文件是不可能的
您的问题似乎是询问是否可以不使用文本编辑器来编辑文件。这是可能的,正如其他人所表明的那样。我在这里的小小贡献如下:
awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config
基本上使用 AWK,我们找到适当的行,将字段 2(即“否”替换为“是”),将所有内容输出到 tmp 文件并使用将原始内容替换为 tmp 文件mv
。
请记住,该配置文件的所有权属于 root,因此您需要sudo
访问权限(sudo
在之前添加mv
)