Initial commit

This commit is contained in:
2021-03-04 21:37:06 +01:00
commit d78319da08
5 changed files with 97 additions and 0 deletions

32
.gitignore vendored Normal file
View File

@@ -0,0 +1,32 @@
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Python
__pycache__/
# Project specific
config.yaml

7
README.md Normal file
View File

@@ -0,0 +1,7 @@
# Sync SSH Keys
## Setup
Rename `config-example.yaml` to `config.yaml` and set your own data.
## Usage
Run `./sync.py` or `python3 sync.py`

10
config-example.yaml Normal file
View File

@@ -0,0 +1,10 @@
hosts:
- google.com
- amazon.com
keys:
- name: johndoe@gmail.com
description: John Doe
key: ssh-rsa XXXXXXXXX
- name: janedoe@gmail.com
description: Jane Doe
key: ssh-rsa YYYYYYYYY

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
PyYAML==5.4.1
paramiko==2.7.2

46
sync.py Executable file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/env python3
import paramiko
import threading
import yaml
class taskThread(threading.Thread):
def __init__(self, host, keys):
threading.Thread.__init__(self)
self.host = host
self.keys = keys
def run(self):
updateKeys(self.host, self.keys)
def readConfig():
with open('config.yaml', 'r') as stream:
return yaml.safe_load(stream)
def updateKeys(host, keys):
try:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
client.connect(host, username = 'root')
client.exec_command('echo "###\n# Warning this file has been generated and will be overwritten!\n###\n\n' + '\n'.join(keys) + '" > ~/.ssh/authorized_keys2')
client.close()
print('' + host)
except Exception:
print('' + host)
def main():
config = readConfig()
keys = []
for key in config['keys']:
keys.append(key['key'])
for host in config['hosts']:
try:
thread = taskThread(host, keys)
thread.start()
except:
print('' + host)
if __name__ == '__main__':
main()