Ich verwende Ubuntu 14.04 und möchte die SSH-Anmeldung landesweit mit GeoIP blockieren (von https://www.axllent.org/docs/view/ssh-geoip/),
Bitte finden Sie die Ausgabe des Befehls:
$ spawn
spawn: command not found
Damit habe ich expect installiert Paket, funktioniert aber immer noch nicht:
apt-get install expect
expect is already the newest version
Ich möchte folgendes Skript ausführen:
cat /etc/hosts.allow
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Haben Sie eine Ahnung davon?
Akzeptierte Antwort:
In diesem Fall scheint spawn
bezieht sich auf den spawn
Erweiterung zu hosts.allow
Syntax, wie in RUNNING OTHER COMMANDS
beschrieben Abschnitt der Manpage hosts_options (5) (man hosts_options
):
RUNNING OTHER COMMANDS
aclexec shell_command
Execute, in a child process, the specified shell command, after
performing the %<letter> expansions described in the
hosts_access(5) manual page. The command is executed with
stdin, stdout and stderr connected to the null device, so that
it won't mess up the conversation with the client host. Example:
smtp : ALL : aclexec checkdnsbl %a
executes, in a background child process, the shell command
"checkdnsbl %a" after replacing %a by the address of the remote
host.
The connection will be allowed or refused depending on whether
the command returns a true or false exit status.
spawn shell_command
Execute, in a child process, the specified shell command, after
performing the %<letter> expansions described in the
hosts_access(5) manual page. The command is executed with
stdin, stdout and stderr connected to the null device, so that
it won't mess up the conversation with the client host. Example:
spawn (/usr/sbin/safe_finger -l @%h | /usr/bin/mail root) &
executes, in a background child process, the shell command
"safe_finger -l @%h | mail root" after replacing %h by the name
or address of the remote host.
Die Tatsache, dass spawn
einen Fehler zurückgibt, wenn Sie versuchen, es außerhalb dieses Kontexts auszuführen (d. h. als Befehl in der Shell), muss Sie nicht beunruhigen – wenn Sie Probleme mit dem ordnungsgemäßen Betrieb des GeoIP-Filterskripts haben, ist das ein separates Problem.
Um den erfolgreichen Betrieb von hosts.allow spawn
zu demonstrieren Erweiterung auf Ubuntu 14.04, ohne sich in GeoIP zu verheddern, können Sie ein minimal ausführbares /usr/local/bin/sshfilter.sh-Skript erstellen, das einfach die IP-Adresse protokolliert und dann 0 zurückgibt, z. B.
#!/bin/sh
logger "$0: connection from $1"
exit 0
Dann mit den folgenden Zeilen zu den Hosts-Dateien hinzugefügt:
Verwandte:Ubuntu bleibt auf dem Anmeldebildschirm hängen?In hosts.deny:
sshd: ALL
In hosts.allow:
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Dann ausführen
tail -f /var/log/syslog
in einem Terminalfenster und versuchen Sie in einem anderen, sich über SSH anzumelden:
ssh localhost
Sie sollten eine Nachricht im Syslog-Tail wie
sehenJul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1
Sie können bestätigen, dass es auch mit aclexec
funktioniert anstelle von spawn
, wie in dem von Ihnen verlinkten Artikel vorgeschlagen. Tatsächlich sollten Sie in diesem Fall aclexec
verwenden seit spawn
verwendet nicht den Exit-Code des erzeugten Prozesses, um zu bestimmen, ob die Verbindung zugelassen werden soll – welcher aclexec
tut .