--- /dev/null
+#!/bin/sh
+
+outfile=$1; shift
+hosts=$1; shift
+
+on()
+{
+ case "$1" in
+ localhost)
+ shift
+ exec "$@"
+ ;;
+ *)
+ exec ssh "$@"
+ ;;
+ esac
+}
+
+pids=
+mainpid=$$
+trap 'kill $pids' EXIT
+trap 'exit 1' INT USR1
+
+n=0
+for h in $hosts; do
+ nn=`on "$h" cat /proc/cpuinfo | grep -c '^processor[ :]'`
+ n=$(($nn + $n))
+done
+
+rm -f bruteforce-*
+i=0
+for h in $hosts; do
+ nn=`on "$h" cat /proc/cpuinfo | grep -c '^processor[ :]'`
+ ii=$(($nn + $i))
+ while [ $i -lt $ii ]; do
+ i=$(($i+1))
+ (
+ on "$h" ./crypto-keygen-standalone -n $n -o /dev/stdout "$@" > bruteforce-$i &
+ pid=$!
+ trap 'kill $pid' TERM
+ wait
+ if [ -s "bruteforce-$i" ]; then
+ trap - TERM
+ mv "bruteforce-$i" "$outfile"
+ kill -USR1 $mainpid
+ else
+ rm -f "bruteforce-$i"
+ fi
+ ) &
+ pids="$pids $!"
+ done
+done
+wait