LoginSignup
0
1

More than 5 years have passed since last update.

authorized_keys を管理するスクリプトを書いた

Posted at

公開鍵のコメントを読み取って削除する鍵を選んだり、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上でユーザー管理できるツールを入れるのは、せっかく公開鍵でしかログインできないようにしてるのにセキュリティの懸念箇所を増やすのもな、とか思って考えもの。
良い方法はないものか。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1