Help us understand the problem. What is going on with this article?

Bitbucket | bitbucket_rest_api gem で 公開鍵を登録・参照・削除 #bitbucket

More than 5 years have passed since last update.

Bitbucket | bitbucket_rest_api gem で 公開鍵を登録・参照・削除 #bitbucket

概要

bitbucket_rest_api gem で 公開鍵を追加・参照・削除します。

前提

手順

Gemfile の作成

環境変数の設定に dotenv gem を利用します

source "https://rubygems.org"

gem "dotenv"
gem "bitbucket"

.env の作成

鍵のIDは BitBucket に登録する際のラベル名を指定する。
鍵のパスは登録対象の鍵のパスを記述する。
Basic 認証用のユーザー名とパスワードを記述する。

PUBLIC_KEY_PATH=public_key_path
PUBLIC_KEY_ID=deploy
LOGIN=your_login_name
PASSWORD=your_password

鍵の登録スクリプト

API は以下。
new_key

鍵の ID にはタイムスタンプを付与します。

require 'bitbucket_rest_api'
require 'dotenv'

begin
  Dotenv.load
  bitbucket = BitBucket.new basic_auth: "#{ENV['LOGIN']}:#{ENV['PASSWORD']}"

  timestamp = Time.now.strftime('%Y%m%d_%H%M%S')
  bitbucket.users.account.new_key(ENV['LOGIN'], {
    key: File.read(ENV['PUBLIC_KEY_PATH']),
    label: "#{ENV['PUBLIC_KEY_ID']}_#{timestamp}" 
  })
  puts "Complete add '#{ENV['PUBLIC_KEY_ID']}_#{timestamp}' key"
  exit(true)
rescue => e
  puts e.message
  exit(false)
end

鍵登録の実行

$ ruby new_key.rb
Complete add 'deploy_20141212_151637' key

鍵の参照スクリプト

API は以下。
keys

.env ファイル・ Gemfile は登録処理と同じ。
自ユーザーの鍵をすべて取得します。

require 'bitbucket_rest_api'
require 'dotenv'

begin
  Dotenv.load
  bitbucket = BitBucket.new basic_auth: "#{ENV['LOGIN']}:#{ENV['PASSWORD']}"

  print bitbucket.users.account.keys(ENV['LOGIN']).map { |e|"id:#{e.pk},label:#{e.label}" }.join("\n") + "\n"
  exit(true)
rescue => e
  puts e.message
  exit(false)
end

鍵参照の実行

$ ruby keys.rb
id:2249918,label:deploy_20141212_151637
id:2249873,label:deploy_20141212_150343
id:2249871,label:deploy_20141212_150247
id:2249868,label:deploy_20141212_150207
id:2249860,label:deploy_20141212_150018
id:2249858,label:deploy_20141212_145946

鍵の削除スクリプト

API は以下。
delete_key

.env ファイル・ Gemfile は登録処理と同じ。
登録処理で複数登録した鍵のうち、最新のタイムスタンプを除いて削除します

require 'bitbucket_rest_api'
require 'dotenv'

def show_keys(bitbucket)
  print bitbucket.users.account.keys(ENV['LOGIN']).map { |e|"id:#{e.pk},label:#{e.label}" }.join("\n") + "\n"
end

begin
  Dotenv.load
  bitbucket = BitBucket.new basic_auth: "#{ENV['LOGIN']}:#{ENV['PASSWORD']}"

  puts "before remove"
  show_keys(bitbucket)
  puts "start remove"
  bitbucket.users.account.keys(ENV['LOGIN']).sort_by { |e|e[:label] }
            .reverse
            .drop(1)
            .each { |e|bitbucket.users.account.delete_key(ENV['LOGIN'], e[:pk]) }
  puts "end   remove"
  show_keys(bitbucket)
  puts "after remove"
  exit(true)
rescue => e
  puts e.message
  exit(false)
end

鍵削除の実行

ruby delete_public_key.rb
  • 出力
$ ruby delete_key.rb
before remove
id:2249918,label:deploy_20141212_151637
id:2249873,label:deploy_20141212_150343
id:2249871,label:deploy_20141212_150247
id:2249868,label:deploy_20141212_150207
id:2249860,label:deploy_20141212_150018
id:2249858,label:deploy_20141212_145946
start remove
end   remove
after remove
id:2249918,label:deploy_20141212_151637

補足

  • REST API の検証時に、 Bitbucket が提供している REST API Console を利用すると便利です

参照

tbpgr
Rubyを扱う人事(研修開発、エンジニア採用) Learning Designer。 tbpgr の読み方は(てぃーびー) 個人ブログでも色々と情報を垂れ流してます。 http://tbpgr.hatenablog.com/
http://tbpgr.hatenablog.com/
studist
「伝えることを、もっと簡単に」をミッションにビジュアルSOPマネジメントプラットフォームのBtoB SaaS「Teachme Biz」を開発・運営するスタートアップ
https://medium.com/studist-dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away