Používám Ubuntu 14.04 a chci zablokovat SSH přihlášení podle země pomocí GeoIP (Z https://www.axllent.org/docs/view/ssh-geoip/),
Najděte prosím výstup příkazu:
$ spawn
spawn: command not found
Takže jsem nainstaloval očekávat balíček, ale stále nefunguje:
apt-get install expect
expect is already the newest version
Chci spustit následující skript:
cat /etc/hosts.allow
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Máte nějakou představu o tom samém?
Přijatá odpověď:
V tomto případě se zdá, že spawn
odkazuje na spawn
rozšíření na hosts.allow
syntaxi, jak je popsáno v RUNNING OTHER COMMANDS
části manuálové stránky 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.
Skutečnost, že spawn
vrátí chybu, když se jej pokusíte spustit mimo tento kontext (tj. jako příkaz v shellu), nemusí vás to zajímat – pokud máte problémy se správnou funkcí skriptu filtrování GeoIP, je to samostatný problém.
Chcete-li demonstrovat úspěšnou činnost hosts.allow spawn
rozšíření na Ubuntu 14.04, aniž byste se zapletli do GeoIP, můžete vytvořit minimální spustitelný skript /usr/local/bin/sshfilter.sh, který jednoduše zaznamená IP adresu a poté vrátí 0, např.
#!/bin/sh
logger "$0: connection from $1"
exit 0
Poté s následujícími řádky přidanými do souborů hostitelů:
Související:Ubuntu uvízlo na přihlašovací obrazovce?V hosts.deny:
sshd: ALL
V hosts.allow:
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Potom spusťte
tail -f /var/log/syslog
v jednom okně terminálu a v jiném se pokuste přihlásit přes SSH:
ssh localhost
Na konci syslogu byste měli vidět zprávu jako
Jul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1
Můžete potvrdit, že funguje také s aclexec
místo spawn
, jak je navrženo v článku, na který jste odkazovali. V tomto případě byste ve skutečnosti měli použít aclexec
od spawn
nepoužívá výstupní kód vytvořeného procesu k určení, zda povolit připojení – který aclexec
dělá .