system/scripts/sh/ssh-keygrep
Georg Pfuetzenreuter 30ebadc915
Init ssh-keygrep
Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
2022-04-26 21:54:56 +02:00

55 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
# Alternative to `sss_ssh_authorizedkeys` which does not behave weirdly
#
# For use with sshd, you may utilize the following example lines in sshd_config:
# AuthorizedKeysCommand /usr/bin/sh -c '/usr/local/bin/ssh-keygrep %u'
# AuthorizedKeysCommandUser nobody
#
# Georg Pfuetzenreuter <georg@lysergic.dev>
# Created and last modified: 26/04/2022
uid="$1"
log="/var/log/ssh-keygrep.log"
uri="ldaps://ldap.example.com"
base="uid=$uid,ou=users,dc=example,dc=com"
attribute="sshPublicKey"
# -x ---> anonymous bind
# -D 'cn=foo,ou=users,dc=example,dc=com' -y '/path/to/passfile' ---> bind as user
auth_args="-x"
# any additional ldapsearch arguments
extra_args=""
binary_ldapsearch="/usr/bin/ldapsearch"
binary_perl="/usr/bin/perl"
if [ -z "$uid" ];
then
echo "Specify a uid."
fi
fetch () {
$binary_ldapsearch -LLL -H $uri $auth_args $extra_args -b $base $attribute
}
parse () {
$binary_perl -p00e 's/\r?\n //g;' -pe 's/sshPublicKey: //g;' -pe 's/\A(^.*$\r?\n){1}//'
}
key="`fetch | parse`"
printf "Key queried by $USER for $uid at `date`, " >> $log
if [ -z "$key" ];
then
echo "no result :-(" >> $log
exit 1
fi
if [ -n "$key" ];
then
echo "result: $key" >> $log
echo "$key"
exit 0
fi