GNU/Linux >> Znalost Linux >  >> Ubuntu

Příkaz spawn nebyl nalezen na Ubuntu 14.04?

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á .


Ubuntu
  1. id:příkaz nenalezen

  2. w:příkaz nenalezen

  3. df:příkaz nenalezen

  1. [Opraveno] Příkaz lsb_release nebyl nalezen v Ubuntu nebo Derivatives

  2. (Vyřešeno) příkaz apt-add-repository nenalezen – Ubuntu &Debian

  3. du:příkaz nenalezen

  1. Tr:Příkaz nenalezen?

  2. ifrename:příkaz nenalezen

  3. rm:příkaz nenalezen