公開鍵のコメントを読み取って削除する鍵を選んだり、Webから公開鍵をDLして追加したりできる。
#!/usr/bin/env bash
set -ue -o pipefail
export LC_ALL=C
DATETIME=`date +"%Y%m%d%H%M%S"`
USER=""
if [ $# -ge 1 ]; then
case "$1" in
--help|-h)
echo "Usage: pubkey [<username> [<url>]]"
echo ""
exit 0
;;
*)
USER=$1
esac
else
echo "User name: "
array=()
for home in `ls /home`; do
array+=($home)
echo -e "\t${#array[@]}) $home"
done
read -p "select user number: " NO
if [ -z "$NO" ]; then
exit
fi
if [ $NO -le ${#array[@]} ]; then
USER=${array[NO-1]}
else
exit 1
fi
fi
KEYFILE="/home/$USER/.ssh/authorized_keys"
if [ -f $KEYFILE -a -s $KEYFILE ]; then
awk '{gsub(/^$/,"unknown",$3);print NR, $3}' $KEYFILE
echo
echo -e "\t1) add"
echo -e "\t2) delete"
read -p "select action number: " NO
if [ "$NO" = "1" ]; then
:
elif [ "$NO" = "2" ]; then
read -p "delete number: " NO
cp -a $KEYFILE $KEYFILE.$DATETIME
sed -i -e "${NO}d" $KEYFILE
echo ""
echo "Success!"
echo -e "\tBackup file: $KEYFILE.$DATETIME"
exit 0
:
else
exit 0
fi
fi
cp -a $KEYFILE $KEYFILE.$DATETIME
echo
echo "add public key from url."
if [ $# -ge 2 ]; then
URL=$2
else
read -p "URL: " URL
fi
read -p "Comment (whose key is it?): " COMMENT
if [ -z $COMMENT ]; then
exit 1
fi
echo
echo -e "get public key file from <$URL>\n and add to $KEYFILE"
echo -e "\tComment: $COMMENT"
echo
echo -e "\t1) OK"
echo -e "\t2) NG"
read -p "OK? :" NO
if [ "$NO" != "1" ]; then
exit 0
fi
wget $URL -O - | awk "{gsub(/^.*\$/,\"$COMMENT\",\$3);print}" >> $KEYFILE
echo "Success!"
echo -e "\tBackup file: $KEYFILE.$DATETIME"
root用なんだけども一般ユーザーでも実行できる。
一般ユーザーならユーザー選択をなくした方がいいなと思いつつ、それならcat
でいいか…とか。
そもそもcat
で鍵を追加できないような人は意味も分からずこのスクリプトを使うことはやめた方が良いか、とか意味が分るなら自分でwgetしてcatした方が早いかな、とか考えてたらドツボ。
変更のたびにバックアップを取るようにしているんだけれども、今時時刻ファイル名のバックアップはどうなの、とかもある。
かと言ってWeb上でユーザー管理できるツールを入れるのは、せっかく公開鍵でしかログインできないようにしてるのにセキュリティの懸念箇所を増やすのもな、とか思って考えもの。
良い方法はないものか。