[fix] put

This commit is contained in:
fenris 2026-08-23 21:36:49 +02:00
parent af3636bcc1
commit f1f8fd7042
2 changed files with 76 additions and 24 deletions

View file

@ -1,3 +1,6 @@
import os as _os
import pathlib as _pathlib
import helpers.misc as __misc
@ -67,7 +70,14 @@ def sshconf_encode_bool(
return ("yes" if value else "no")
def sshconf_encode_entry(name, entry, prefix):
def sshconf_encode_entry(name, entry, prefix, options = None):
options = (
{
"keys_directory": _os.path.join(_pathlib.Path.home(), ".ssh", "keys"),
}
|
(options or {})
)
lines = []
lines.append(__misc.string_coin("Host {{prefix}}{{name}}", {"prefix": prefix, "name": name}))
if ("host" in entry):
@ -77,7 +87,7 @@ def sshconf_encode_entry(name, entry, prefix):
if ("username" in entry):
lines.append(__misc.string_coin("\tUser {{username}}", {"username": entry["username"]}))
if ("key_name" in entry):
lines.append(__misc.string_coin("\tIdentityFile {{key_path}}", {"key_path": ("~/.ssh/keypairs/%s%s" % (prefix, entry["key_name"]))}))
lines.append(__misc.string_coin("\tIdentityFile {{key_path}}", {"key_path": _os.path.join(options["keys_directory"], ("%s%s.pub" % (prefix, entry["key_name"])))}))
if ("proxy_jump" in entry):
lines.append(__misc.string_coin("\tProxyJump {{proxy_jump}}", {"proxy_jump": entry["proxy_jump"]}))
if ("proxy_command" in entry):
@ -90,13 +100,23 @@ def sshconf_encode_entry(name, entry, prefix):
return "\n".join(lines)
def sshconf_encode(conf):
def sshconf_encode(conf, options = None):
options = (
{
"keys_directory": _os.path.join(_pathlib.Path.home(), ".ssh", "keys"),
}
|
(options or {})
)
return "\n".join(
map(
lambda pair: sshconf_encode_entry(
pair[0],
pair[1],
conf["settings"]["prefix"]
conf["settings"]["prefix"],
{
"keys_directory": options["keys_directory"],
}
),
sorted(
conf["entries"].items(),

View file

@ -3,6 +3,7 @@ import os as _os
import json as _json
import shutil as _shutil
import argparse as _argparse
import pathlib as _pathlib
import helpers.misc as __helpers_misc
import helpers.ssh as __helpers_ssh
@ -184,21 +185,26 @@ todo: backup (see old put script)
'''
def action_put(
source_directory,
target_directory
target_directory,
target_file
):
sshconf = ""
keys_directory = _os.path.join(target_directory, "public_keys")
for group in _os.listdir(source_directory):
path_temp = _os.path.join(source_directory, group)
if (
not
(not _os.path.isdir(path_temp))
or
(
_os.path.isdir(path_temp)
and
(group == ".")
and
(group == "..")
and
(group == ".git")
(
(group == ".")
or
(group == "..")
or
(group == ".git")
)
)
):
pass
@ -208,17 +214,32 @@ def action_put(
conf_data = _json.loads(conf_content)
# conf
if True:
sshconf = (sshconf + "\n" + __helpers_ssh.sshconf_encode(conf_data))
sshconf = (
"%s\n%s"
% (
sshconf,
__helpers_ssh.sshconf_encode(
conf_data,
{
"keys_directory": keys_directory,
}
)
)
)
# public keys
if True:
__helpers_misc.directory_create(target_directory)
for name in _os.listdir(_os.path.join(source_directory, group, "keys")):
_shutil.copy(
_os.path.join(source_directory, group, "keys", name),
_os.path.join(target_directory, "%s%s" % (conf_data["settings"]["prefix"], name, ))
)
if (not name.endswith(".pub")):
pass
else:
_os.makedirs(keys_directory, exist_ok = True)
_shutil.copy(
_os.path.join(source_directory, group, "keys", name),
_os.path.join(keys_directory, ("%s%s" % (conf_data["settings"]["prefix"], name, )))
)
# private keys
if True:
if False:
keepass_db_path = _os.path.join(source_directory, "private_keys.kdbx")
_shutil.copy(
keepass_db_path,
@ -263,9 +284,16 @@ def main():
"-t",
"--target-directory",
type = str,
default = "~/.ssh",
default = _os.path.join(_pathlib.Path.home(), ".ssh"),
metavar = "<target-directory>",
)
argument_parser.add_argument(
"-f",
"--target-file",
type = str,
default = _os.path.join(_pathlib.Path.home(), ".ssh", "private_keys.kdbx"),
metavar = "<target-file>",
)
argument_parser.add_argument(
"-g",
"--group",
@ -310,11 +338,14 @@ def main():
}
)
elif (args.action == "key-generate"):
action_key_generate(
args.source_directory,
args.group,
args.name
)
if (args.name is None):
raise ValueError("name required")
else:
action_key_generate(
args.source_directory,
args.group,
args.name
)
elif (args.action == "key-remove"):
action_key_remove(
args.source_directory,
@ -324,7 +355,8 @@ def main():
elif (args.action == "put"):
action_put(
args.source_directory,
args.target_directory
args.target_directory,
args.target_file
)
else:
raise ValueError("invalid action: %s", args.action)