# wm-ssh
Ssh wrapper to expand wikimedia hostnames.
Currently it will try several sources, heavily using caches:
* Known working entries
* Known hosts file (https://config-master.wikimedia.org/known_hosts.ecdsa)
* Netbox (https://netbox.wikimedia.org)
* Openstack Browser (https://openstack-browser.toolforge.org)
# Installation
## pip
Just `pip install wm-ssh`, that should bring in a new binary, wm-ssh.
## Configuration
You can change the default settings by creating a configuration file, and passing the path using
`--config-file` or using the default `~/.config/wm-ssh/config.json`.
You can se an example of the loaded configuration running:
```
wm-ssh -v --print-config
```
### Known hosts url
This is a url with an ssh `known hosts` formatted file (see man for sshd(8) for the format), the
default one will use wikimedia bare metal hosts and non-cloud VMs.
### Openstack browser
Url to the openstack browser toolforge tool, with the list of all the VMs, the default will use
the current available one.
### Netbox
NOTE: The netbox feature needs you to have a token for netbox.wikimedia.org, see:
https://netbox.wikimedia.org/user/api-tokens/
You can either configure the netbox cli and set just the path to the config file (the default is
`~/.config/netbox/config.json`), or you can set the netbox token and url directly in the wm-ssh
config like (`~/.config/wm-ssh/config.json`):
```
{
"netbox_config": {
"netbox_url": "https://netbox.wikimedia.org/api",
"api_token": "myapitokenwouldgohere"
}
}
```
## Running from code
Note that this mode will require some tweaks in the auto-completing for it to work.
Clone the code:
```
git clone git@github.com:david-caro/wm-ssh.git
```
Install dependencies with poetry:
```
poetry install
```
Run with poetry:
```
poetry run wm-ssh <MYHOST>
```
# Bash completion
You can use the `utils/wm-ssh.complete` file (source it from your bashrc for example) to achieve bash completion features,
though they only work with wmcs openstack instances and known hosts.
For example, add in your `~/.bashrc` file:
```
source /path/to/git/repo/utirs/wm-ssh.complete
```
After that, it will autocomplete host names from the caches:
```
08:04 PM ~/Work/repos/per_user/david-caro/wm-ssh (main|✚ 2)
dcaro@vulcanus$ wm-ssh an<tab><tab>
Display all 127 possibilities? (y or n)<y>
an-airflow1001.eqiad.wmnet an-presto1004.eqiad.wmnet an-worker1101.eqiad.wmnet
an-airflow1002.eqiad.wmnet an-presto1005.eqiad.wmnet an-worker1102.eqiad.wmnet
an-airflow1003.eqiad.wmnet an-test-client1001.eqiad.wmnet an-worker1103.eqiad.wmnet
analytics1058.eqiad.wmnet an-test-coord1001.eqiad.wmnet an-worker1104.eqiad.wmnet
analytics1059.eqiad.wmnet an-test-coord1002.eqiad.wmnet an-worker1105.eqiad.wmnet
analytics1060.eqiad.wmnet an-test-druid1001.eqiad.wmnet an-worker1106.eqiad.wmnet
analytics1061.eqiad.wmnet an-test-master1001.eqiad.wmnet an-worker1107.eqiad.wmnet
analytics1062.eqiad.wmnet an-test-master1002.eqiad.wmnet an-worker1108.eqiad.wmnet
analytics1063.eqiad.wmnet an-test-presto1001.eqiad.wmnet an-worker1109.eqiad.wmnet
analytics1064.eqiad.wmnet an-test-ui1001.eqiad.wmnet an-worker1110.eqiad.wmnet
analytics1065.eqiad.wmnet an-test-worker1001.eqiad.wmnet an-worker1111.eqiad.wmnet
analytics1066.eqiad.wmnet an-test-worker1002.eqiad.wmnet an-worker1112.eqiad.wmnet
analytics1067.eqiad.wmnet an-test-worker1003.eqiad.wmnet an-worker1113.eqiad.wmnet
analytics1068.eqiad.wmnet an-tool1005.eqiad.wmnet an-worker1114.eqiad.wmnet
analytics1069.eqiad.wmnet an-tool1007.eqiad.wmnet an-worker1115.eqiad.wmnet
analytics1070.eqiad.wmnet an-tool1008.eqiad.wmnet an-worker1116.eqiad.wmnet
analytics1071.eqiad.wmnet an-tool1009.eqiad.wmnet an-worker1117.eqiad.wmnet
analytics1072.eqiad.wmnet an-tool1010.eqiad.wmnet an-worker1118.eqiad.wmnet
analytics1073.eqiad.wmnet an-tool1011.eqiad.wmnet an-worker1119.eqiad.wmnet
analytics1074.eqiad.wmnet an-web1001.eqiad.wmnet an-worker1120.eqiad.wmnet
analytics1075.eqiad.wmnet an-worker1078.eqiad.wmnet an-worker1121.eqiad.wmnet
analytics1076.eqiad.wmnet an-worker1079.eqiad.wmnet an-worker1122.eqiad.wmnet
analytics1077.eqiad.wmnet an-worker1080.eqiad.wmnet an-worker1123.eqiad.wmnet
an-conf1001.eqiad.wmnet an-worker1081.eqiad.wmnet an-worker1124.eqiad.wmnet
an-conf1002.eqiad.wmnet an-worker1082.eqiad.wmnet an-worker1125.eqiad.wmnet
an-conf1003.eqiad.wmnet an-worker1083.eqiad.wmnet an-worker1126.eqiad.wmnet
an-coord1001.eqiad.wmnet an-worker1084.eqiad.wmnet an-worker1127.eqiad.wmnet
an-coord1002.eqiad.wmnet an-worker1085.eqiad.wmnet an-worker1128.eqiad.wmnet
an-db1001.eqiad.wmnet an-worker1086.eqiad.wmnet an-worker1129.eqiad.wmnet
an-db1002.eqiad.wmnet an-worker1087.eqiad.wmnet an-worker1130.eqiad.wmnet
an-db-backup-1.analytics.eqiad1.wikimedia.cloud an-worker1088.eqiad.wmnet an-worker1131.eqiad.wmnet
andrewtest2.trove.eqiad1.wikimedia.cloud an-worker1089.eqiad.wmnet an-worker1132.eqiad.wmnet
an-druid1001.eqiad.wmnet an-worker1090.eqiad.wmnet an-worker1133.eqiad.wmnet
an-druid1002.eqiad.wmnet an-worker1091.eqiad.wmnet an-worker1134.eqiad.wmnet
an-druid1003.eqiad.wmnet an-worker1092.eqiad.wmnet an-worker1135.eqiad.wmnet
an-druid1004.eqiad.wmnet an-worker1093.eqiad.wmnet an-worker1136.eqiad.wmnet
an-druid1005.eqiad.wmnet an-worker1094.eqiad.wmnet an-worker1137.eqiad.wmnet
an-launcher1002.eqiad.wmnet an-worker1095.eqiad.wmnet an-worker1138.eqiad.wmnet
an-master1001.eqiad.wmnet an-worker1096.eqiad.wmnet an-worker1139.eqiad.wmnet
an-master1002.eqiad.wmnet an-worker1097.eqiad.wmnet an-worker1140.eqiad.wmnet
an-presto1001.eqiad.wmnet an-worker1098.eqiad.wmnet an-worker1141.eqiad.wmnet
an-presto1002.eqiad.wmnet an-worker1099.eqiad.wmnet
an-presto1003.eqiad.wmnet an-worker1100.eqiad.wmnet
08:04 PM ~/Work/repos/per_user/david-caro/wm-ssh (main|✚ 2)
dcaro@vulcanus$ wm-ssh an
```
Raw data
{
"_id": null,
"home_page": "https://github.com/david-caro/wm-ssh",
"name": "wm-ssh",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8.1,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "David Caro",
"author_email": "me@dcaro.es",
"download_url": "https://files.pythonhosted.org/packages/a5/69/ea1cddf22732a0c4784ce90fa014137f5d35666203ced6d69b1d87d5931b/wm_ssh-0.4.1.tar.gz",
"platform": null,
"description": "# wm-ssh\n\nSsh wrapper to expand wikimedia hostnames.\n\nCurrently it will try several sources, heavily using caches:\n* Known working entries\n* Known hosts file (https://config-master.wikimedia.org/known_hosts.ecdsa)\n* Netbox (https://netbox.wikimedia.org)\n* Openstack Browser (https://openstack-browser.toolforge.org)\n\n# Installation\n## pip\n\nJust `pip install wm-ssh`, that should bring in a new binary, wm-ssh.\n\n## Configuration\nYou can change the default settings by creating a configuration file, and passing the path using\n`--config-file` or using the default `~/.config/wm-ssh/config.json`.\n\nYou can se an example of the loaded configuration running:\n```\nwm-ssh -v --print-config\n```\n\n### Known hosts url\nThis is a url with an ssh `known hosts` formatted file (see man for sshd(8) for the format), the\ndefault one will use wikimedia bare metal hosts and non-cloud VMs.\n\n### Openstack browser\nUrl to the openstack browser toolforge tool, with the list of all the VMs, the default will use\nthe current available one.\n\n\n### Netbox\nNOTE: The netbox feature needs you to have a token for netbox.wikimedia.org, see:\n https://netbox.wikimedia.org/user/api-tokens/\n\nYou can either configure the netbox cli and set just the path to the config file (the default is\n`~/.config/netbox/config.json`), or you can set the netbox token and url directly in the wm-ssh\nconfig like (`~/.config/wm-ssh/config.json`):\n```\n{\n \"netbox_config\": {\n \"netbox_url\": \"https://netbox.wikimedia.org/api\",\n \"api_token\": \"myapitokenwouldgohere\"\n }\n}\n```\n\n## Running from code\n\nNote that this mode will require some tweaks in the auto-completing for it to work.\n\nClone the code:\n```\ngit clone git@github.com:david-caro/wm-ssh.git\n```\n\nInstall dependencies with poetry:\n```\npoetry install\n```\n\nRun with poetry:\n```\npoetry run wm-ssh <MYHOST>\n```\n\n\n# Bash completion\n\nYou can use the `utils/wm-ssh.complete` file (source it from your bashrc for example) to achieve bash completion features,\nthough they only work with wmcs openstack instances and known hosts.\n\nFor example, add in your `~/.bashrc` file:\n```\nsource /path/to/git/repo/utirs/wm-ssh.complete\n```\n\nAfter that, it will autocomplete host names from the caches:\n```\n08:04 PM ~/Work/repos/per_user/david-caro/wm-ssh (main|\u271a 2)\ndcaro@vulcanus$ wm-ssh an<tab><tab>\n\nDisplay all 127 possibilities? (y or n)<y>\n\nan-airflow1001.eqiad.wmnet an-presto1004.eqiad.wmnet an-worker1101.eqiad.wmnet\nan-airflow1002.eqiad.wmnet an-presto1005.eqiad.wmnet an-worker1102.eqiad.wmnet\nan-airflow1003.eqiad.wmnet an-test-client1001.eqiad.wmnet an-worker1103.eqiad.wmnet\nanalytics1058.eqiad.wmnet an-test-coord1001.eqiad.wmnet an-worker1104.eqiad.wmnet\nanalytics1059.eqiad.wmnet an-test-coord1002.eqiad.wmnet an-worker1105.eqiad.wmnet\nanalytics1060.eqiad.wmnet an-test-druid1001.eqiad.wmnet an-worker1106.eqiad.wmnet\nanalytics1061.eqiad.wmnet an-test-master1001.eqiad.wmnet an-worker1107.eqiad.wmnet\nanalytics1062.eqiad.wmnet an-test-master1002.eqiad.wmnet an-worker1108.eqiad.wmnet\nanalytics1063.eqiad.wmnet an-test-presto1001.eqiad.wmnet an-worker1109.eqiad.wmnet\nanalytics1064.eqiad.wmnet an-test-ui1001.eqiad.wmnet an-worker1110.eqiad.wmnet\nanalytics1065.eqiad.wmnet an-test-worker1001.eqiad.wmnet an-worker1111.eqiad.wmnet\nanalytics1066.eqiad.wmnet an-test-worker1002.eqiad.wmnet an-worker1112.eqiad.wmnet\nanalytics1067.eqiad.wmnet an-test-worker1003.eqiad.wmnet an-worker1113.eqiad.wmnet\nanalytics1068.eqiad.wmnet an-tool1005.eqiad.wmnet an-worker1114.eqiad.wmnet\nanalytics1069.eqiad.wmnet an-tool1007.eqiad.wmnet an-worker1115.eqiad.wmnet\nanalytics1070.eqiad.wmnet an-tool1008.eqiad.wmnet an-worker1116.eqiad.wmnet\nanalytics1071.eqiad.wmnet an-tool1009.eqiad.wmnet an-worker1117.eqiad.wmnet\nanalytics1072.eqiad.wmnet an-tool1010.eqiad.wmnet an-worker1118.eqiad.wmnet\nanalytics1073.eqiad.wmnet an-tool1011.eqiad.wmnet an-worker1119.eqiad.wmnet\nanalytics1074.eqiad.wmnet an-web1001.eqiad.wmnet an-worker1120.eqiad.wmnet\nanalytics1075.eqiad.wmnet an-worker1078.eqiad.wmnet an-worker1121.eqiad.wmnet\nanalytics1076.eqiad.wmnet an-worker1079.eqiad.wmnet an-worker1122.eqiad.wmnet\nanalytics1077.eqiad.wmnet an-worker1080.eqiad.wmnet an-worker1123.eqiad.wmnet\nan-conf1001.eqiad.wmnet an-worker1081.eqiad.wmnet an-worker1124.eqiad.wmnet\nan-conf1002.eqiad.wmnet an-worker1082.eqiad.wmnet an-worker1125.eqiad.wmnet\nan-conf1003.eqiad.wmnet an-worker1083.eqiad.wmnet an-worker1126.eqiad.wmnet\nan-coord1001.eqiad.wmnet an-worker1084.eqiad.wmnet an-worker1127.eqiad.wmnet\nan-coord1002.eqiad.wmnet an-worker1085.eqiad.wmnet an-worker1128.eqiad.wmnet\nan-db1001.eqiad.wmnet an-worker1086.eqiad.wmnet an-worker1129.eqiad.wmnet\nan-db1002.eqiad.wmnet an-worker1087.eqiad.wmnet an-worker1130.eqiad.wmnet\nan-db-backup-1.analytics.eqiad1.wikimedia.cloud an-worker1088.eqiad.wmnet an-worker1131.eqiad.wmnet\nandrewtest2.trove.eqiad1.wikimedia.cloud an-worker1089.eqiad.wmnet an-worker1132.eqiad.wmnet\nan-druid1001.eqiad.wmnet an-worker1090.eqiad.wmnet an-worker1133.eqiad.wmnet\nan-druid1002.eqiad.wmnet an-worker1091.eqiad.wmnet an-worker1134.eqiad.wmnet\nan-druid1003.eqiad.wmnet an-worker1092.eqiad.wmnet an-worker1135.eqiad.wmnet\nan-druid1004.eqiad.wmnet an-worker1093.eqiad.wmnet an-worker1136.eqiad.wmnet\nan-druid1005.eqiad.wmnet an-worker1094.eqiad.wmnet an-worker1137.eqiad.wmnet\nan-launcher1002.eqiad.wmnet an-worker1095.eqiad.wmnet an-worker1138.eqiad.wmnet\nan-master1001.eqiad.wmnet an-worker1096.eqiad.wmnet an-worker1139.eqiad.wmnet\nan-master1002.eqiad.wmnet an-worker1097.eqiad.wmnet an-worker1140.eqiad.wmnet\nan-presto1001.eqiad.wmnet an-worker1098.eqiad.wmnet an-worker1141.eqiad.wmnet\nan-presto1002.eqiad.wmnet an-worker1099.eqiad.wmnet\nan-presto1003.eqiad.wmnet an-worker1100.eqiad.wmnet\n\n08:04 PM ~/Work/repos/per_user/david-caro/wm-ssh (main|\u271a 2)\ndcaro@vulcanus$ wm-ssh an\n```\n\n\n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "Wikimedia ssh wrapper to expand host names",
"version": "0.4.1",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "94f1964f13e7e32c7566d1906689f4ce9fec30d72f0b74adb45509155cf60a97",
"md5": "b4fba922373c5302550f21aa6e3cefb3",
"sha256": "622e53f0ba734dfd970bbd3124819c29626957a214926b066a93bf7f06583fe0"
},
"downloads": -1,
"filename": "wm_ssh-0.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b4fba922373c5302550f21aa6e3cefb3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8.1,<4.0",
"size": 19925,
"upload_time": "2023-01-03T11:10:45",
"upload_time_iso_8601": "2023-01-03T11:10:45.455210Z",
"url": "https://files.pythonhosted.org/packages/94/f1/964f13e7e32c7566d1906689f4ce9fec30d72f0b74adb45509155cf60a97/wm_ssh-0.4.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a569ea1cddf22732a0c4784ce90fa014137f5d35666203ced6d69b1d87d5931b",
"md5": "7d6a4b4e87dc3f4bbd64e27116fe4704",
"sha256": "133696b9fc50947dff63e51d503badbc501410d239a875bba1a42b3d5c52de58"
},
"downloads": -1,
"filename": "wm_ssh-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "7d6a4b4e87dc3f4bbd64e27116fe4704",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.1,<4.0",
"size": 20406,
"upload_time": "2023-01-03T11:10:46",
"upload_time_iso_8601": "2023-01-03T11:10:46.590617Z",
"url": "https://files.pythonhosted.org/packages/a5/69/ea1cddf22732a0c4784ce90fa014137f5d35666203ced6d69b1d87d5931b/wm_ssh-0.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-03 11:10:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "david-caro",
"github_project": "wm-ssh",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "wm-ssh"
}