2016-06-20 13 views
0

In der erwarteten Skript, wenn ich remote auf einem System über SSH einloggen dann sudo su -, ich möchte überprüfen, /var/log/secure für eine bestimmte Zeichenfolge und zeigen die Ausgabe auf dem Bildschirm, wenn diese Zeichenfolge nur existiert oder nicht (senden „grep ....)Erwarten Skript überprüfen/var/log/message

expect << 'EOF' 
    spawn ssh -q $env(U1)@$env(S1) 
    expect "password:" { 
     send $env(P1)\r 
    } 
    expect "$env(U1)@$env(S1)" { 
     send "sudo su - \r" 
    } 
    expect "password" { 
     send $env(P1)\r 
    } 

    expect { 
     "# " { 
      send "grep 'pam_unix(su-l:session): session opened for user root by' /var/log/secure" 
     } 
     "Authentication failure" { 
      send_user "Su ROOT Fail ...... Fail\n" 
      send \x03 
     } 
    } 
EOF 

Antwort

1

Da Sie nach einer bestimmten Zeichenfolge sind, Sie off fgrep mit besten sind. Wenn Sie sich interessieren, ob die Zeichenfolge vorhanden sind, und nicht, ob Es gibt noch etwas um Sie herum, Sie verwenden die -q Option und ein wenig Shell-Tricks, um ein Ergebnis zu erhalten, dass es einfach zu handhaben ist:

fgrep -q '....' /var/log/secure && echo FOUND || echo ABSENT 

Als nächstes müssen Sie das in Ihrem Expect-Skript in einer Weise verbinden, die funktioniert. Insbesondere müssen wir sicherstellen, dass der Code nicht die Suche ausgeführt werden, wenn ein Fehler auftritt, zu erhöhen:

# Factored out for line-length reasons. :-) 
set searchTerm "pam_unix(su-l:session): session opened for user root by" 
expect { 
    "# " { 
     send "fgrep -q '$searchTerm' /var/log/secure && echo FOUND || echo ABSENT" 
    } 
    "Authentication failure" { 
     send_user "Su ROOT Fail ...... Fail\n" 
     send \x03 
     #### STOP THE EXPECT SCRIPT RUNNING! 
     close 
     exit 1 
    } 
} 
expect { 
    "FOUND" { 
     # ... 
    } 
    "ABSENT" { 
     # ... 
    } 
} 

Die Kunst des Schreibens ein gutes Erwarten Skript in Vorwegnahme der Ausfall-Modi. Außerdem sollten Sie wahrscheinlich send "exec sudo su -\r" verwenden, so dass das Ende der erhöhten Sitzung auch das Ende der gesamten Sitzung ist.

+0

Danke, es funktioniert, dauerte eine Weile, um zu spielen –