2016-10-10 2 views
0
  1. Suche Zeile mit "#PermitRootLogin ja" ab und ersetzen mit "PermitRootLogin no"
  2. Anfügen Zeile unten sagen "AllowUsers [email protected]"
  3. Restart sshd Daemon

(My-Code)Harden sshd_config über Python

#!/usr/bin/python3 
import fileinput 

for line in fileinput.input("/etc/ssh/sshd_config", inplace=True), : 
    print (line.replace("#PermitRootLogin", "PermitRootLogin no")) 

(Error)

Traceback (letzter Anruf zuletzt): Datei "./assignment4-part1.py", Zeile 6, in drucken (line.replace ("# PermitRootLogin", "PermitRootLogin = Nein")) AttributeError: 'FileInput 'Objekt hat kein Attribut ‚ersetzen‘

(Anmerkungen)

ich habe versucht, verschiedene Methoden, wie von anderen Beiträgen gesehen Fund tun und ersetzen Linie, sondern laufen in ähnliche Probleme/Fehler. Jede Anleitung würde sehr geschätzt werden. Ich benutze CentOS und python3 ist installiert/aktualisiert.

Antwort

0

Sie haben einen Syntaxfehler in Ihrem Code. Ihr for Schleife Ausdruck hat ein fehlerhaftes Komma:

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

Das bedeutet, dass Sie iterieren tatsächlich eine Einzelelement-Tupel, die ein fileinput.FileInput Objekt, anstatt Iteration über das Objekt selbst.

Entfernen Sie das Komma:

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

Zwei weitere kurze Empfehlungen:

nicht print in der Schleife verwenden Sie, weil print eine neue Zeile anhängt, so dass Sie bis zweiAbstand Ihre gesamte Ende werden Datei. Betrachten Sie stattdessen:

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

Schließlich überlegen, was passiert, wenn Ihre Eingabedatei enthält:

#PermitRootLogin no 

Ihr Code wird umschreiben dies als:

PermitRootLogin no no 

Welche ungültig ist.

+0

Dank für die Hilfe. stieß immer noch auf einige Probleme. Wenn ich meine sshd_config-Datei in den gleichen Ordner wie mein Skript lege, löscht es bei der Ausführung alles in der Datei, und das führt zu einem niedrigeren Fehler. – tekdj1

+0

danke für die Hilfe. stieß immer noch auf einige Probleme. Wenn ich meine sshd_config-Datei in den gleichen Ordner wie mein Skript lege, löscht es bei der Ausführung alles in der Datei, und das führt zu einem niedrigeren Fehler. – tekdj1

+0

Traceback (letzter Anruf zuletzt): Datei "ssh-part1.py", Zeile 6, in sys.stdout.write (line.replace ("# PermitRootLogin", "PermitRootLogin Nein")) NameError: Name 'sys' ist nicht definiert – tekdj1

0

Fügen Sie import sys an der Spitze der Python-Datei. Und ein guter Anfänger zu Python führen:>

Oder betrachten wir mit GNU sed regex und vermeiden Python insgesamt