Commit 39db981f authored by Daniel Stan's avatar Daniel Stan

draft: gestion des clés ssh

parent 81326554
...@@ -654,39 +654,77 @@ def show_file(options): ...@@ -654,39 +654,77 @@ def show_file(options):
return return
passfile = value passfile = value
(sin, sout) = gpg(options, 'decrypt') (sin, sout) = gpg(options, 'decrypt')
content = passfile['contents'] # Kludge (broken db ?) content = passfile['contents']
# Kludge (broken db ?)
if type(content) == list: if type(content) == list:
print("Eau dans le gaz") print("Eau dans le gaz")
content = content[-1] content = content[-1]
# Déchiffre le contenu
sin.write(content.encode("utf-8")) sin.write(content.encode("utf-8"))
sin.close() sin.close()
texte = sout.read().decode("utf-8") texte = sout.read().decode("utf-8")
ntexte = u""
hidden = False # Est-ce que le mot de passe a été caché ? # Est-ce une clé ssh ?
lines = texte.split('\n') is_key = texte.startswith('-----BEGIN RSA PRIVATE KEY-----')
# Est-ce que le mot de passe a été caché ? (si non, on utilisera less)
is_hidden = is_key
# Texte avec mdp caché
filtered = u""
# Ancien contenu du press papier
old_clipboard = None old_clipboard = None
for line in lines:
# Essaie de planquer le mot de passe
for line in texte.split('\n'):
catchPass = None catchPass = None
# On essaie de trouver le pass pour le cacher dans le clipboard # On essaie de trouver le pass pour le cacher dans le clipboard
# si ce n'est déjà fait et si c'est voulu # si ce n'est déjà fait et si c'est voulu
if not hidden and options.clipboard: if not is_hidden and options.clipboard:
catchPass = pass_regexp.match(line) catchPass = pass_regexp.match(line)
if catchPass != None: if catchPass != None:
hidden = True is_hidden = True
# On met le mdp dans le clipboard en mémorisant sont ancien contenu # On met le mdp dans le clipboard en mémorisant son ancien contenu
old_clipboard = clipboard(catchPass.group(1)) old_clipboard = clipboard(catchPass.group(1))
# Et donc on override l'affichage # Et donc on override l'affichage
line = u"[Le mot de passe a été mis dans le presse papier]" line = u"[Le mot de passe a été mis dans le presse papier]"
ntexte += line + '\n' filtered += line + '\n'
showbin = "cat" if hidden else "less"
if is_key:
filtered = u"La clé a été mise dans l'agent ssh"
shown = u"Fichier %s:\n\n%s-----\nVisible par: %s\n" % (fname, filtered, ','.join(passfile['roles']))
if is_key:
with tempfile.NamedTemporaryFile(suffix='') as key_file:
# Génère la clé publique correspondante
key_file.write(texte.encode('utf-8'))
key_file.flush()
pub = subprocess.check_output(['ssh-keygen', '-y', '-f', key_file.name])
# Charge en mémoire
subprocess.check_call(['ssh-add', key_file.name])
# On attend
print(shown.encode('utf-8'))
raw_input()
# On met la clé publique en fichier puis on supprime
key_file.seek(0)
key_file.write(pub)
key_file.flush()
subprocess.check_call(['ssh-add', '-d', key_file.name])
else:
# Le binaire à utiliser
showbin = "cat" if is_hidden else "less"
proc = subprocess.Popen([showbin], stdin=subprocess.PIPE) proc = subprocess.Popen([showbin], stdin=subprocess.PIPE)
out = proc.stdin out = proc.stdin
raw = u"Fichier %s:\n\n%s-----\nVisible par: %s\n" % (fname, ntexte, ','.join(passfile['roles'])) out.write(shown.encode("utf-8"))
out.write(raw.encode("utf-8"))
out.close() out.close()
os.waitpid(proc.pid, 0) os.waitpid(proc.pid, 0)
# Repope ancien pass # Repope ancien pass
if options.clipboard: if old_clipboard:
saveclipboard(restore=True, old_clipboard=old_clipboard) saveclipboard(restore=True, old_clipboard=old_clipboard)
@need_filename @need_filename
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment