Perl
версия Ответ Стивена :
perl -MSocket -F- -lane '
sub ip_to_n {unpack"N",inet_aton$_[0]}
BEGIN {$i=ip_to_n(shift)}
if (/:$/) {chop;$l=$_} else {
print $l if $i >= ip_to_n($F[0]) && $i <= ip_to_n($F[1])
}' 172.25.2.32 file1 file2...
Есть некоторые требования, чтобы он заработал:
DISPLAY
в переменной окружения необходимо установить что-нибудь (что угодно сделает), чтобы активировать функцию SSH_ASKPASS
. gpg-agent
и tty-based pinentry. На системах Debian/Ubuntu запустите apt-get install pinentry-curses
и используйте /usr/bin/pinentry-curses
. Запустите скрипт следующим образом:
export DISPLAY=anything
export SSH_ASKPASS="/path/to/script/calling/pass"
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid ssh myserver
Обратите внимание, что setsid
util-linux в последних дистрибутивах (Debian 8.0 или более поздние версии, Ubuntu 14.10 или более поздние версии) нуждается в -w
, чтобы дождаться завершения подпроцесса, иначе вы запутаетесь с сессией ssh, запущенной в фоновом режиме.
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid -w ssh myserver