Subversion: получить IP-адрес пользователя в хуке pre-commit?
Мы размещаем хранилище Subversion для разработки программного обеспечения. Таким образом, лица, не являющиеся сотрудниками, имеют доступ к некоторому нашему коду кодов. Политика нашей компании в области ИТ-безопасности требует, чтобы мы проверяли все файлы, загруженные извне нашей корпоративной сети. Все внутренние компьютеры оснащены современными антивирусными сканерами.
Мы планируем интегрировать антивирусную проверку в precommit-ловушку Subversion. Но это вызывает задержки при выполнении больших коммитов. Поэтому мы хотели бы сканировать только коммиты, созданные за пределами нашей интрасети. Чтобы определить источник, нам нужен IP-адрес пользователя, выполняющего фиксацию. Поскольку некоторые из наших сотрудников работают из дома, мы не можем использовать имена пользователей для идентификации коммитов из Интернета.
Таким образом, наконец, мой вопрос:
Как я могу получить IP-адрес, с которого выполняется фиксация в ловушке precommit?
2 ответа
Позвольте мне представить, что вы пишете свой хук на Perl, в этом случае вы можете использовать следующую библиотеку lib: DocumentationClientIP
Вы можете установить lib из Git по этой ссылке: GITClientIP (или использовать включенный код).
После установки вам нужно добавить что-то подобное в ваш код:
use SVN::Utils::ClientIP qw(ssh_client_ip);
print "The client's IP address is ", ssh_client_ip();
Я использую lsof (предварительная фиксация bash-скрипта):
srcip=$(/usr/sbin/lsof -Pn -p $PPID | grep ESTABLISHED)
или, чтобы получить только IP:
srcip=$(/usr/sbin/lsof -Pn|grep ssh|grep ESTA|cut -d\> -f 2|cut -d: -f 1)
Пока клиент подключается к серверу, выполняется предварительная фиксация. lsof
показывает все открытые файлы (включая TCP-соединения и т. д.); Я выбираю все "файлы" для этого процесса (-p $PPID
) и grep для ESTABLISHED
(это связь между клиентом и сервером).