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?
spawn
est expect
commande spécifique i.e. vous devez interpréter spawn
à l'aide de expect
name__.
La plupart du temps, vous utiliseriez un script expect
et spawn
afin 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, spawn
renvoie la commande, donc la sortie dans le terminal.
Dans ce cas, il semblerait que spawn
se réfère à l'extension spawn
de 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 spawn
renvoie 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 spawn
sur 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 spawn
name__, comme suggéré dans l'article que vous avez lié. En fait, dans ce cas, vous devriez utiliser aclexec
puisque spawn
n'utilise pas le code de sortie du processus généré pour déterminer si vous souhaitez autoriser la connexion - ce que fait aclexec
name__.