Это работает в Ubuntu 18.04 с Gnome 3.28.2 / gnome-keyring 3.28.0 / Seahorse 3.20:
$ apt install libgnome-keyring-dev
$ gem install keyring
require 'keyring'
keyring = Keyring.new
keyring.set_password('service', 'username', 'password')
password = keyring.get_password('service', 'username')
# => "password"
keyring.delete_password('service', 'username')
К сожалению, гем keyring
не позволяет использовать что-либо, кроме набора ключей по умолчанию. Чтобы использовать другие брелоки, или если вы просто хотите вырезать посредника:
$ gem install gir_ffi-gnome_keyring
require 'gir_ffi-gnome_keyring'
service_name = 'MyApplication'
username = 'Blah'
attrs = GnomeKeyring::AttributeList.new
attrs.append_string 'service', service_name
attrs.append_string 'username', username
attrs.append_string 'arbitrary_values', "whatever"
status, item_id = GnomeKeyring.item_create_sync(
"My Other Keyring",
:generic_secret,
"#{service_name} (#{username})",
attrs,
'my secret password',
true
)
# Using default keyring:
# status, item_id = GnomeKeyring.item_create_sync(
# nil,
# :generic_secret,
# "#{service_name} (#{username})",
# attrs,
# 'my secret password',
# true
# )
# Method signature:
# .item_create_sync(keyring, type, display_name, attributes, secret, update_if_exists)
status, keys = GnomeKeyring.find_items_sync :generic_secret, attrs
keys.first.secret
# => "my secret password"
# NOTE: find_items_sync() will search all unlocked keyrings of the right type and will
# return an array of all matches. There doesn't seem to be a way of narrowing the search.
Если брелок разблокирован (что, вероятно, и будет, потому что по умолчанию он использует ваш брелок для входа в систему, который автоматически разблокируется при входе в систему), тогда чтение и запись будут работать без проблем. Если набор ключей заблокирован, вам будет предложено ввести пароль для разблокировки набора ключей, прежде чем произойдет какое-либо чтение или запись.
Если вы видите следующее сообщение об ошибке:
Typelib file for namespace 'GnomeKeyring' (any version) not found
Тогда вам, вероятно, нужно установить заголовки gnome-keyring (apt install libgnome-keyring-dev
)