{ "info": { "author": "Bas Westerbaan", "author_email": "bas@westerbaan.name", "bugtrack_url": null, "classifiers": [], "description": "claviger\n********\n\n``claviger`` manages the SSH ``authorized_keys`` files for you.\n\nQuick introduction\n==================\n\nTell ``claviger`` which keys you want to put on which server\nby creating a ``~/.claviger``-file. An example\n\n.. code:: yaml\n\n keys:\n laptop: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINYZEwjtu8w9Hsvx85TlYE95MLV9Whc3N1ajrH7+gu7A\n desktop: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICUef9frJIX7tjvZkYYMtr4IdD/GcKz6/X5qvLxM1Z8O desktop\n work: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICrycv44eyFwWJ7QQsGOnjEiAsFSdxIoAEzBPSO/AQB5 work\n servers:\n myprivateserver.com:\n user: myusername\n present:\n - laptop\n - desktop\n root@myotherserver.com:\n like: myprivateserver.com\n present:\n - work\n keepOtherKeys: false\n workuser@workserver.com:\n present:\n - work\n - desktop\n absent:\n - laptop\n\nThen run ``claviger``. By default ``claviger`` only tells which changes\nit wants to make, but does not make them. If the changes seem fine,\nrun ``claviger -f``, which allows ``claviger`` to make changes.\n\nInstallation\n============\n\nTo install ``claviger``, simply run::\n\n pip install claviger\n\n\nClaviger config file\n====================\n\nA ``.claviger`` is written in YAML_. It consists of two maps: the ``keys``\nmap and the ``servers`` map.\n\n.. code:: yaml\n\n servers:\n server_key:\n # ... (server stanza)\n server_key2:\n # ... (server stanza)\n keys:\n key_name: # ... (ssh public key)\n key_name2: # ... (ssh public key)\n\nAs seen in the example at the top, the ``keys`` map has as values SSH\npublic keys as they would appear in an ``authorized_keys`` file.\n\nThe ``servers`` map consists of key-stanza pairs. Each stanza is a map\nof option name/value pairs, like:\n\n.. code:: yaml\n\n server_key:\n option_name: option_value\n option_name2: option_value\n # ...\n\nSee below for the available options in the server-stanza's.\n\nServer key\n----------\n\nThe key of a server stanza is of the following form::\n\n [user@]hostname[:port]\n\nExamples of keys are\n\n- ``just-a-hostname.nl``\n- ``user@some-server.com``\n- ``some-server.nl:1234``\n- ``user@and-port.com:22022``\n\nYou can also specify ``user``, ``hostname`` and ``port`` explicitly.\nSee below.\n\nIf a server key starts with a dollar sign (for instance ``$work``),\nthen it is considered ``abstract`` --- see below.\n\nServer stanzas\n--------------\n\nA server stanza is a map which may have the following entries.\n\n================== =============================================================\n``name`` | The name of the server.\n | *Default*: stanza key.\n``hostname`` | The hostname of the server.\n | *Default*: derived from stanza key.\n``user`` | The user for which to manage the ``authorized_keys`` file\n | *Default*: ``root`` if not derived from stanza key.\n``present`` | A list of key names that must be in the\n ``authorized_keys`` file.\n | *Default*: the empty list ``[]``\n``absent`` | A list of SSH-keys that should be removed from the\n ``authorized_keys`` file.\n | *Default*: the empty list ``[]``\n``keepOtherKeys`` | ``true`` or ``false``. If set to ``false``, ``claviger``\n will remove all keys not explicitly allowed form the\n ``authorized_keys`` file.\n | *Default*: ``true``.\n``allow`` | A list of SSH-keys that are also allowed to be in the\n ``authorized_keys`` file if ``keepOtherKeys`` is set\n to ``false``. These keys will not be added, if\n not present already.\n | *Default*: the empty list ``[]``\n``like`` | Name of another server stanza. If set, the entries of\n the other server stanza will be used as default values\n for this server stanza.\n | *Default*: ``$default``\n``ssh_user`` | The user to use to get and put the\n ``authorized_keys`` file.\n | *Default*: the same as ``user``\n``port`` | The port to use to connect to the server.\n | *Default*: 22.\n``abstract`` | ``true`` or ``false``. If set to ``true``, ``claviger``\n will not check this server. See below.\n | *Default*: ``false``\n================== =============================================================\n\n\nAbstract servers and ``$default``\n---------------------------------\n\n``claviger`` will not check an *abstract* server. This is useful to cleanly\nconfigure multiple server.\n\n.. code:: yaml\n\n servers:\n $mine:\n keepOthers: false\n present:\n - my_first_key\n - my_second_key\n $work:\n present:\n - my_work_key\n absent:\n - my_first_key\n\n my-first-server.tld:\n like: $mine\n my-second-server.tld:\n like: $mine\n alpha.at-work.tld:\n like: $work\n beta.at_work.tld:\n like: $work\n\nBy default, server inherits from the hidden ``$default`` abstract server.\n\n.. code:: yaml\n\n servers:\n $default:\n user: myname\n present:\n - this_key_is_put_everywhere\n host1.tld: # will use myname as user\n host2.tld: # \"\n root@host3.tld # will use root as user\n host4.tld:\n absent:\n - this_key_is_put_everywhere # except here\n\n\n.. _YAML: http://yaml.org\n\nclaviger Changelog\n******************\n\n0.2.1 (2016-03-15)\n==================\n\n- Add missing dependency to jsonschema. (Thanks-to: Joost Rijneveld)\n- Properly decode output of `scp`. (Thanks-to: Joost Rijneveld)\n\n\n0.2 (2016-01-14)\n================\n\n- Add ``allow``-list to server stanza.\n\n If ``keepOtherKeys`` is set to false, claviger will remove any keys present\n except for those in the ``present`` and ``allow`` list.\n- Add *abstract servers*. Let every server inherit from the hidden\n abstract server ``$default``.\n- Allow\n\n .. code:: yaml\n\n servers:\n server1:\n server2:\n\n which is prettier than\n\n .. code:: yaml\n\n servers:\n server1: {}\n server2: {}\n\n- bugfix: actually set server name with ``name`` option.\n\n\n0.1.2 (2016-01-08)\n==================\n\n- Show the correct number of keys actually removed.\n\n\n0.1.1 (2015-12-21)\n==================\n\n- Some cosmetic changes.\n- Show example configuration file, if claviger isn't configured yet.\n- Python 3 compatibility.\n\n0.1.0 (2015-12-14)\n==================\n\n- Initial release.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/bwesterb/claviger/", "keywords": "", "license": "GPL 3.0", "maintainer": "", "maintainer_email": "", "name": "claviger", "package_url": "https://pypi.org/project/claviger/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/claviger/", "project_urls": { "Homepage": "http://github.com/bwesterb/claviger/" }, "release_url": "https://pypi.org/project/claviger/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "Synchronizes remote SSH authorized_keys", "version": "0.2.1" }, "last_serial": 2007782, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c9fa336e0554142f4168308b67c87b79", "sha256": "0aaddbc8751660010bb3cbb2a3883f3b94385ad92ef68441f1db51e3a2716c55" }, "downloads": -1, "filename": "claviger-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c9fa336e0554142f4168308b67c87b79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22342, "upload_time": "2015-12-14T21:52:11", "url": "https://files.pythonhosted.org/packages/fb/1c/32c918863fde06d2b107fb7ddb63373ebeba387913cf996018ad14a2d65f/claviger-0.1.0.tar.gz" } ], "0.1.0.dev0": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "98f5f5f5902d0c966cc355adbf83c090", "sha256": "01886a53b41a3a9c2a3af7573a3f8a716fad939d4abfa13bd02ab3bfe8192da4" }, "downloads": -1, "filename": "claviger-0.1.1.tar.gz", "has_sig": false, "md5_digest": "98f5f5f5902d0c966cc355adbf83c090", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23292, "upload_time": "2015-12-21T14:26:55", "url": "https://files.pythonhosted.org/packages/ad/3e/73ede8e79bc6390b2b8d9d0d6c0f7eddf05d43c5c2ab63af27e59593e49d/claviger-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c6bacf81af6a2c23f45f5351aa17256e", "sha256": "6b7e691807749c81bfdf4fa7d8e158703392b05656fc5ef13378f3784a30cc6d" }, "downloads": -1, "filename": "claviger-0.1.2.tar.gz", "has_sig": false, "md5_digest": "c6bacf81af6a2c23f45f5351aa17256e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23384, "upload_time": "2016-01-08T14:03:21", "url": "https://files.pythonhosted.org/packages/27/2d/294b8c64161ba99d5d6a5358cc27049b41cc614dbf5d0741ad740d73992d/claviger-0.1.2.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "0e25fa020c5641a71c3c0c0ed3ebefaf", "sha256": "72f75455137ed64521f0e7b5e659aca35cfa30e810b8b07a48d3161dcfb7363c" }, "downloads": -1, "filename": "claviger-0.2.tar.gz", "has_sig": false, "md5_digest": "0e25fa020c5641a71c3c0c0ed3ebefaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27033, "upload_time": "2016-01-14T21:25:26", "url": "https://files.pythonhosted.org/packages/16/4c/3eec5859d5716399ff7dfb7fcc388041166da4d6fdf683d1f122707e1399/claviger-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3d90d0ffac5d2606f68b7623d19d2597", "sha256": "121a697cde550a858d9a65d23030510b2c9c09d38ed9928a244dfc18e387cafd" }, "downloads": -1, "filename": "claviger-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3d90d0ffac5d2606f68b7623d19d2597", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27096, "upload_time": "2016-03-15T13:03:19", "url": "https://files.pythonhosted.org/packages/0c/b8/ba607bfc40cf23ddfac3aa6674bc7a0828830228378379124cc1eb5e492b/claviger-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3d90d0ffac5d2606f68b7623d19d2597", "sha256": "121a697cde550a858d9a65d23030510b2c9c09d38ed9928a244dfc18e387cafd" }, "downloads": -1, "filename": "claviger-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3d90d0ffac5d2606f68b7623d19d2597", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27096, "upload_time": "2016-03-15T13:03:19", "url": "https://files.pythonhosted.org/packages/0c/b8/ba607bfc40cf23ddfac3aa6674bc7a0828830228378379124cc1eb5e492b/claviger-0.2.1.tar.gz" } ] }