Kenichi Maehashi's Blog
脳内コアダンプ
プログラミングの楽しみは 実用性よか試行錯誤の過程 だよねっ
Friday | March 21, 2008
|
ちょっと必要に迫られて、ユーザの ssh の公開鍵を連続で消すシェルスクリプトを書いた。
Syntax: ./ssh_authkey_del.sh user1 user2 ...
ssh_authkey_del.sh#!/bin/sh for un in $* do echo -n "$un: "; su -c "rm ~/.ssh/authorized_keys" - $un; done この 6 行を書くのに 30 分くらい掛かった気がするので、きっと手動で消したほうが早かったけど・・・
最初色々考えていたときに「あるユーザが存在するかどうかを確認する方法」を検討していたのですが(これを調べるのに時間が掛かった)、必要ないことに気づいて消しました。 こんなアプローチ。後で必要になったときのために、自分用メモとして残しておきます(もっといい方法があるかも)。id $un &> /dev/null; if [ $? -ne 0 ]; then echo "$un: No such user"; else echo "$un: User exists"; fi 目指せ Mac + Windows + Linux の三刀流!(それでも Mac が 1 番目なのはご愛嬌...)
|
| コメント (3)
|
| コメント |
by 寿 2008/03/21
do...doneの中身、僕ならこうかな。
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
|
by Kenichi Maehashi 2008/03/22
ありがとうございます。 自分のサーバでは無いので、一般ユーザから他のユーザの authorized_keys を削除したかったのです(言葉が足りず済みません)。 そのため echo -n "$un: "; で、su の出すパスワードプロンプトが誰のものか判るようにしてみました。
コマンドにエイリアスが振ってある可能性までは考えつきませんでした。ハイフンを取り除けば大丈夫ですね(help にある "make the shell a login shell" の意味が良く判っていませんでした...)。
|
by 寿 2008/03/23
意図的にパスワードプロンプト出したかったのか、それならsu -cでOKだね。
|
| |
<< 前ページ[1]
トップページに戻る
Copyright © 2006-2021 Kenichi Maehashi, All Rights Reserved.