Category:
Linux
ちょっと必要に迫られて、ユーザの ssh の公開鍵を連続で消すシェルスクリプトを書いた。
Syntax: ./ssh_authkey_del.sh user1 user2 ...
ssh_authkey_del.sh
最初色々考えていたときに「あるユーザが存在するかどうかを確認する方法」を検討していたのですが(これを調べるのに時間が掛かった)、必要ないことに気づいて消しました。
こんなアプローチ。後で必要になったときのために、自分用メモとして残しておきます(もっといい方法があるかも)。
Syntax: ./ssh_authkey_del.sh user1 user2 ...
ssh_authkey_del.sh
#!/bin/shこの 6 行を書くのに 30 分くらい掛かった気がするので、きっと手動で消したほうが早かったけど・・・
for un in $*
do
echo -n "$un: ";
su -c "rm ~/.ssh/authorized_keys" - $un;
done
最初色々考えていたときに「あるユーザが存在するかどうかを確認する方法」を検討していたのですが(これを調べるのに時間が掛かった)、必要ないことに気づいて消しました。
こんなアプローチ。後で必要になったときのために、自分用メモとして残しておきます(もっといい方法があるかも)。
id $un &> /dev/null;目指せ Mac + Windows + Linux の三刀流!(それでも Mac が 1 番目なのはご愛嬌...)
if [ $? -ne 0 ]; then
echo "$un: No such user";
else
echo "$un: User exists";
fi
RSS
Comments
TARGET_FILE="~$un/.ssh/authorized_keys"
if [ -f $TARGET_FILE ]; then
echo "delete $TARGET_FILE"
rm $TARGET_FILE -f
fi
動かしてないのでちゃんと動かないかも。
su -c "rm ~/.ssh/authorized_keys" - $un;
だと、-でsu先のユーザ環境になるので、rmがalias rm='rm -i'されてると-fないと消せない場合があるかもしれない。
あと、suでパスなしで違うユーザになれる権限があるならたぶん実行するのはrootなのでsuしなくて良いかなって感じ。
2個目のid $unは、/dev/nullがちょっと気になるので、無くすなら次のような感じかな。
if [`getent passwd $un | wc -l` -ne 1]; then
自分のサーバでは無いので、一般ユーザから他のユーザの authorized_keys を削除したかったのです(言葉が足りず済みません)。
そのため echo -n "$un: "; で、su の出すパスワードプロンプトが誰のものか判るようにしてみました。
コマンドにエイリアスが振ってある可能性までは考えつきませんでした。ハイフンを取り除けば大丈夫ですね(help にある "make the shell a login shell" の意味が良く判っていませんでした...)。