SSH based SSO for home use

Below is the description of the simple, ssh based SSO for home or small office use.

Server side:

Authman is a secure user with no password-based access.

authman:*:990:0::0:0:SSH Key Manager:/opt/var/db/authman:/bin/sh

Home directory of authman contains authorized_keys file required to
access server from another machine and
per-user authorized_keys.u_dms file or per-host
authorized_keys.h_akeno, that will be provided to a client.

:~authman/.ssh#ls -l
-rw------- 1 authman wheel 397 Jul 15 20:36 authorized_keys
-rw------- 1 authman wheel 6667 Jul 15 21:03 authorized_keys.h_akeno
-rw------- 1 authman wheel 1838 Jul 15 21:07 authorized_keys.h_kodi
-rw------- 1 authman wheel 6667 Jul 15 20:37 authorized_keys.u_dms

To manage public keys, I use an additional directory that holds all
required public keys and simple script (like this one: ssh_manager.py) to build per-host authorized_keys
file.

:~authman/keys#ls -l
-rw------- 1 root wheel 394 Jul 15 21:37 id_dsamersov_rsa.pub
-rw------- 1 root wheel 394 Jul 15 21:38 id_ssamersova_rsa.pub


Client side:

In a /root/.ssh folder of a client we have:

akeno:.ssh#ls -l
-rwx------ 1 root root 332 Jul 15 21:16 authorized_keys_cmd.sh
-rw------- 1 root root 151 Jul 15 21:12 config
-rw------- 1 root root 1823 Jul 15 20:39 id_authman_rsa

ssh config file:

Host mircat.net home.mircat.net
User authman
IdentityFile ~/.ssh/id_authman_rsa

Script that acts as an agent authorized_keys_cmd.sh, my one
implements one hour cashing, but one-liner also works fine. The name of
user, that attempts to login is passed as script parameter by sshd.

#!/bin/sh

user="nobody"
hostname=`hostname`

[ -n "$1" ] && user=$1

fn=`find ~/.ssh -name "authorized_keys.${hostname}_tmp" -mmin -60`
if [ -z ${fn} ]
then
scp authman@home.mircat.net:~/.ssh/authorized_keys.h_${hostname} ~/.ssh/authorized_keys.${hostname}_tmp
fi

cat ~/.ssh/authorized_keys.${hostname}_tmp

After testing the script locally, we finally go and modify
/etc/sshd_config file and add to following lines

AuthorizedKeysCommand /root/.ssh/authorized_keys_cmd.sh
AuthorizedKeysCommandUser root