技術メモ帳 このページをアンテナに追加 RSSフィード

2006-07-28

[]sshで指定したコマンドしか実行できない公開鍵を作る 22:39 sshで指定したコマンドしか実行できない公開鍵を作るを含むブックマーク sshで指定したコマンドしか実行できない公開鍵を作るのブックマークコメント

自動バックアップ処理をさせたいが

シェル権限を与えたくないときとかに使える技。


やり方は簡単で $HOME/.ssh/authorized_keys の

"コマンドを制限したい公開鍵" の行の先頭に

実行させたいコマンドを記述すればよい。


そのときのフォーマットはだいたい以下のようになる。

command="実行させたいコマンド",sshのオプションをカンマ区切りで書く

command=hoge というのを付け足すことによって

その公開鍵でアクセスがあったときに

指定したコマンドを実行させることができる。


たとえば、uptime を実行させたいときは、

以下のようにすればよい。

command="uptime",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding ssh-rsa AAAABbBFERTWER....(省略)

こうしておくと、アクセスがあったとき、

以下のようにそのコマンドのみが実行され、

すぐに接続を終了させることができる。

$ ssh user@remote_host
22:29  up 22 mins, 2 users, load averages: 0.09 0.24 0.16
Connection to remote_host closed.

そして、たとえば、

/var/log/messages を バックアップするためだけのアカウントを作るには、

そのアカウントの authorized_keys を以下のように設定して、

標準出力に /var/log/messages を gzip したものを出力するようにしたらよい。

command="gzip -c /var/log/messages",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding ...(省略)

こうしておくことによって、アクセスするだけで

/var/log/messages の圧縮データが取得できるようになる。

シェルを使用する権限を公開しなくて済むため、

セキュリティ的なリスクを抑えることもできる。

(ログは読まれてしまいますが..)


以下は、その実行例。

$ ssh user@remote_host
#
# ここに、/var/log/messages を gzip圧縮した
# バイナリデータが表示される
#

後は煮たり焼いたり。

# -q は、サイレントモード
$ ssh -q user@remote_host > ./backup.gz

$ ssh -q user@remote_host | gunzip | sed ...(省略) | vim -
4798109339
翔泳社 株式会社アンク
購入: 1人 クリック: 58回
479801348X
秀和システム 新山祐介
購入: 3人 クリック: 39回