Я использую Ubuntu 14.04, и я хочу заблокировать страну входа в систему SSH мудрое использование GeoIP (От https://www.axllent.org/docs/view/ssh-geoip/),
Найдите вывод команды:
$ spawn
spawn: command not found
Так, чтобы у меня была установка, ожидают пакет, но все еще работу:
apt-get install expect
expect is already the newest version
Я хочу выполнить следующий сценарий:
cat /etc/hosts.allow
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
У Вас есть какая-либо идея относительно того же?
spawn
expect
определенная команда, т.е. необходимо интерпретировать spawn
использование expect
.
Большую часть времени Вы использовали бы expect
сценарий и использование spawn
внутренняя часть это для запуска нового процесса.
, Например:
#!/usr/bin/expect -f
spawn ssh host
expect ....
От терминала непосредственно:
% expect -c 'spawn whoami'
spawn whoami
значением по умолчанию spawn
эхо команда следовательно вывод в терминале.
В этом случае это кажется этим spawn
относится к spawn
расширение hosts.allow
синтаксис, как описано в RUNNING OTHER COMMANDS
раздел 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.
Факт это spawn
возвращает ошибку, когда Вы пытаетесь работать, она за пределами того контекста (т.е. как команда в оболочке) не должна касаться Вас - если у Вас есть проблемы с правильным функционированием GeoIP, фильтрующего сценарий, это - отдельный вопрос.
Продемонстрировать успешную операцию hosts.allow spawn
расширение на Ubuntu 14.04, не попадая в историю в GeoIP, можно создать минимальный исполняемый файл/usr/local/bin/sshfilter.sh сценарий, который просто регистрирует IP-адрес и затем возвращается 0, например.
#!/bin/sh
logger "$0: connection from $1"
exit 0
Затем со следующими строками, добавленными к файлам hosts:
В hosts.deny:
sshd: ALL
В hosts.allow:
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Затем выполненный
tail -f /var/log/syslog
в одном окне терминала и, в другом, попытка зарегистрировать на пути SSH:
ssh localhost
Необходимо видеть сообщение в хвосте системного журнала как
Jul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1
Можно подтвердить, что это также работает с aclexec
вместо spawn
, как предложено в статье Вы связались. На самом деле в этом случае необходимо использовать aclexec
с тех пор spawn
не использует код выхода порожденного процесса, чтобы определить, позволить ли соединение - который aclexec
делает.