查找以“ #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


哪个无效。

10-04 15:57