J'utilise Ubuntu 14.04 et je souhaite bloquer la connexion SSH par pays 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
Alors que j'ai installé attendre package mais ne fonctionne 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 ?
Réponse acceptée :
Dans ce cas, il semble que spawn
fait référence au spawn
extension à hosts.allow
syntaxe, comme décrit dans le RUNNING OTHER COMMANDS
section 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 essayez de l'exécuter en dehors de ce contexte (c'est-à-dire en tant que commande dans le shell) ne doit pas vous concerner - si vous rencontrez des problèmes avec le bon fonctionnement du script de filtrage GeoIP, c'est un problème distinct.
Pour démontrer le bon fonctionnement de hosts.allow spawn
sur Ubuntu 14.04 sans vous emmêler dans GeoIP, vous pouvez créer un script 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
Puis avec les lignes suivantes ajoutées aux fichiers hosts :
En relation :Ubuntu bloqué sur l'écran de connexion ?Dans hosts.deny :
sshd: ALL
Dans hosts.allow :
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Puis lancez
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 syslog comme
Jul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1
Vous pouvez confirmer que cela fonctionne également avec aclexec
à la place de spawn
, comme suggéré dans l'article que vous avez lié. En fait, dans ce cas, vous devez utiliser aclexec
depuis spawn
n'utilise pas le code de sortie du processus généré pour déterminer s'il faut autoriser la connexion - quel aclexec
fait .