查找以“ #PermitRootLogin yes”开头的行,并替换为“ PermitRootLogin no”
在底部添加一行,内容为“ AllowUsers [email protected]”
重新启动sshd守护程序
(我的代码)
#!/usr/bin/python3
import fileinput
for line in fileinput.input("/etc/ssh/sshd_config", inplace=True), :
print (line.replace("#PermitRootLogin", "PermitRootLogin no"))
(错误)
追溯(最近一次通话):
文件“ ./assignment4-part1.py”,第6行,在
打印(line.replace(“#PermitRootLogin”,“ PermitRootLogin = no”))
AttributeError:'FileInput'对象没有属性'replace'
(笔记)
我尝试了其他查找和替换行的方法,从其他帖子中可以看到,但是遇到了类似的问题/错误。任何指导将不胜感激。我正在使用CentOS,并且python3已安装/更新。
最佳答案
您的代码中有语法错误。您的for
循环表达式有一个错误的逗号:
for line in fileinput.input("/etc/ssh/sshd_config", inplace=True), :
这意味着您实际上是在迭代包含
fileinput.FileInput
对象的单元素元组,而不是迭代对象本身。删除逗号:
for line in fileinput.input("sshd_config", inplace=True):
另外两个简短的建议:
请勿在循环中使用
print
,因为print
会添加换行符,因此您最终将整个文件的间距加倍。请考虑:for line in fileinput.input("sshd_config", inplace=True):
sys.stdout.write(line.replace("#PermitRootLogin", "PermitRootLogin no"))
最后,考虑如果您的输入文件包含以下内容,将会发生什么:
#PermitRootLogin no
您的代码会将其重写为:
PermitRootLogin no no
哪个无效。