web-dev-qa-db-fra.com

commande spawn introuvable sur Ubuntu 14.04

J'utilise Ubuntu 14.04 et je souhaite bloquer les connexions SSH en utilisant GeoIP (De https://www.axllent.org/docs/view/ssh-geoip/ ),

Veuillez trouver le résultat de la commande:

$ spawn
spawn: command not found

Donc, j'ai installé attendre le paquet mais je ne travaille toujours pas:

apt-get install expect
expect is already the newest version

Je veux exécuter le script suivant:

cat /etc/hosts.allow
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a

Avez-vous une idée à ce sujet?

3
Nullpointer

spawnest expectcommande spécifique i.e. vous devez interpréter spawnà l'aide de expectname__.

La plupart du temps, vous utiliseriez un script expectet spawnafin de démarrer un nouveau processus.

Par exemple:

#!/usr/bin/expect -f
spawn ssh Host
expect ....

Depuis le terminal directement:

% expect -c 'spawn whoami'
spawn whoami

Par défaut, spawnrenvoie la commande, donc la sortie dans le terminal.

6
heemayl

Dans ce cas, il semblerait que spawnse réfère à l'extension spawnde la syntaxe hosts.allow, comme décrit dans la section RUNNING OTHER COMMANDS de la page de manuel 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.

Le fait que spawnrenvoie une erreur lorsque vous tentez de l'exécuter en dehors de ce contexte (c'est-à-dire en tant que commande dans le shell) n'a pas à vous inquiéter - si vous rencontrez des problèmes liés au bon fonctionnement du script de filtrage GeoIP qui est un problème distinct.


Pour démontrer le bon fonctionnement de l'extension hosts.allow spawnsur Ubuntu 14.04 sans s'embrouiller dans GeoIP, vous pouvez créer un exécutable minimal /usr/local/bin/sshfilter.sh qui enregistre simplement l'adresse IP puis renvoie 0. par exemple.

#!/bin/sh

logger "$0: connection from $1"

exit 0

Ensuite, avec les lignes suivantes ajoutées aux fichiers hôtes:

Dans hosts.deny:

sshd: ALL

Dans hosts.allow:

sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a

Puis courir

tail -f /var/log/syslog

dans une fenêtre de terminal et, dans une autre, essayez de vous connecter via SSH:

ssh localhost

Vous devriez voir un message dans la queue de syslog comme

Jul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1

Vous pouvez vérifier qu'il fonctionne également avec aclexecà la place de spawnname__, comme suggéré dans l'article que vous avez lié. En fait, dans ce cas, vous devriez utiliser aclexecpuisque spawnn'utilise pas le code de sortie du processus généré pour déterminer si vous souhaitez autoriser la connexion - ce que fait aclexecname__.

2
steeldriver