通过python强化sshd_配置

2024-04-26 07:23:36 发布

您现在位置:Python中文网/ 问答频道 /正文

  1. 找到以“#permitrotologin yes”开头的行,并替换为“permitrotologin no”
  2. 在底部附加一行,说明“AllowUsers用户1@test.com““
  3. 重新启动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行,in 打印(线路。更换(“#许可登录”,“许可登录=否”) AttributeError:“FileInput”对象没有属性“replace”

(注)

我尝试了不同的方法,从其他帖子看到的查找和替换行,但遇到了类似的问题/错误。任何指导都将不胜感激。我使用的是CentOS,python3已经安装/更新。在


Tags: no用户intestcom错误linereplace
2条回答

代码中有语法错误。您的for循环表达式有一个错误的逗号:

for line in fileinput.input("/etc/ssh/sshd_config", inplace=True), : 

这意味着您实际上是在一个包含fileinput.FileInput对象的单个元素元组上迭代,而不是迭代对象本身。在

删除逗号:

^{pr2}$

另外两个简短的建议:

不要在循环中使用print,因为print会附加一个换行符,所以您将以两倍的间距结束整个文件。相反,请考虑:

for line in fileinput.input("sshd_config", inplace=True):                       
    sys.stdout.write(line.replace("#PermitRootLogin", "PermitRootLogin no"))              

最后,考虑一下如果您的输入文件包含:

#PermitRootLogin no

您的代码将重写为:

PermitRootLogin no no

这是无效的。在

如果是Python文件,请将import sys添加到顶部。并获得一本好的Python初学者指南:>

或者考虑使用gnused regex并完全避免使用Python

相关问题 更多 >