Partial setsshkey implementation
parent
c1a958bf9c
commit
e4d954ef4e
|
@ -13,12 +13,13 @@ import grp
|
||||||
from termcolor import cprint
|
from termcolor import cprint
|
||||||
import git
|
import git
|
||||||
import libarchive
|
import libarchive
|
||||||
|
#from libarchive.entry import FileType
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import pathlib
|
import pathlib
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
|
import tempfile
|
||||||
|
|
||||||
#FORGEJO_VERSION="8.0.3"
|
#FORGEJO_VERSION="8.0.3"
|
||||||
FORGEJO_VERSION="9.0.0"
|
FORGEJO_VERSION="9.0.0"
|
||||||
|
@ -303,7 +304,7 @@ class OpengnsysGitInstaller:
|
||||||
public_key = None
|
public_key = None
|
||||||
with libarchive.file_reader(client_initrd_path) as initrd:
|
with libarchive.file_reader(client_initrd_path) as initrd:
|
||||||
for file in initrd:
|
for file in initrd:
|
||||||
#self.__logger.debug("Archivo: %s", file)
|
self.__logger.debug("Archivo: %s", file)
|
||||||
|
|
||||||
if file.pathname in self.key_paths_dict:
|
if file.pathname in self.key_paths_dict:
|
||||||
data = bytearray()
|
data = bytearray()
|
||||||
|
@ -318,6 +319,73 @@ class OpengnsysGitInstaller:
|
||||||
|
|
||||||
return public_key
|
return public_key
|
||||||
|
|
||||||
|
def set_ssh_key(self, client_num = None):
|
||||||
|
INITRD = "oginitrd.img"
|
||||||
|
|
||||||
|
tftp_dir = os.path.join(self.base_path, "tftpboot")
|
||||||
|
|
||||||
|
if client_num is None:
|
||||||
|
self.__logger.info("Will modify default client")
|
||||||
|
client_num = self.oglive.get_default()
|
||||||
|
|
||||||
|
|
||||||
|
ogclient = self.oglive.get_clients()[client_num]
|
||||||
|
client_initrd_path = os.path.join(tftp_dir, ogclient, INITRD)
|
||||||
|
client_initrd_path_new = client_initrd_path + ".new"
|
||||||
|
|
||||||
|
self.__logger.info("initrd path is %s", client_initrd_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
temp_dir = tempfile.TemporaryDirectory()
|
||||||
|
|
||||||
|
client_key = os.path.join(temp_dir.name, "id_ed25519")
|
||||||
|
|
||||||
|
self.__logger.debug("Writing new SSH key into %s", client_key)
|
||||||
|
subprocess.run(["/usr/bin/ssh-keygen", "-t", "ed25519", "-N", "", "-f", client_key], check=True)
|
||||||
|
|
||||||
|
keydata_priv = None
|
||||||
|
with open(client_key, "rb") as client_file:
|
||||||
|
keydata_priv = client_file.read()
|
||||||
|
|
||||||
|
keydata_pub = None
|
||||||
|
with open(client_key + ".pub", "rb") as client_file:
|
||||||
|
keydata_pub = client_file.read()
|
||||||
|
|
||||||
|
|
||||||
|
self.__logger.debug("Writing new initrd into %s", client_initrd_path_new)
|
||||||
|
|
||||||
|
with libarchive.file_reader(client_initrd_path) as orig_initrd:
|
||||||
|
#self.__logger.debug("Original initrd was format %s", orig_initrd.format_name)
|
||||||
|
with libarchive.file_writer(client_initrd_path_new, "cpio") as new_initrd:
|
||||||
|
|
||||||
|
for file in orig_initrd:
|
||||||
|
self.__logger.debug("File: %s, type %i", file, file.filetype)
|
||||||
|
|
||||||
|
|
||||||
|
if file.isreg():
|
||||||
|
data = bytearray()
|
||||||
|
for block in file.get_blocks():
|
||||||
|
data = data + block
|
||||||
|
|
||||||
|
self.__logger.debug("Adding pathname %s, len %i", file.pathname, len(data))
|
||||||
|
new_initrd.add_file_from_memory(file.pathname, len(data), bytes(data), permission = file.mode, mtime=file.mtime, ctime=file.ctime)
|
||||||
|
elif file.isdir():
|
||||||
|
file.modi
|
||||||
|
self.__logger.debug("Pathname %s is a directory", file.pathname)
|
||||||
|
elif file.islnk():
|
||||||
|
self.__logger.debug("Pathname %s is a symlink", file.pathname)
|
||||||
|
None
|
||||||
|
else:
|
||||||
|
self.__logger.error("Unhandled file type %s", str(file.filetype))
|
||||||
|
|
||||||
|
new_initrd.add_file_from_memory("scripts/ssl/id_ed25519.pub", len(keydata_pub), keydata_pub)
|
||||||
|
new_initrd.add_file_from_memory("scripts/ssl/id_ed25519", len(keydata_priv), keydata_priv)
|
||||||
|
new_initrd.add_file_from_memory()
|
||||||
|
|
||||||
|
|
||||||
def install(self):
|
def install(self):
|
||||||
"""Instalar
|
"""Instalar
|
||||||
|
|
||||||
|
@ -653,6 +721,10 @@ if __name__ == '__main__':
|
||||||
parser.add_argument('--ignoresshkey', action='store_true', help="Ignorar clave de SSH")
|
parser.add_argument('--ignoresshkey', action='store_true', help="Ignorar clave de SSH")
|
||||||
parser.add_argument('--usesshkey', type=str, help="Usar clave SSH especificada")
|
parser.add_argument('--usesshkey', type=str, help="Usar clave SSH especificada")
|
||||||
parser.add_argument('--test-createuser', action='store_true')
|
parser.add_argument('--test-createuser', action='store_true')
|
||||||
|
parser.add_argument('--extract-ssh-key', action='store_true', help="Extract SSH key from oglive")
|
||||||
|
parser.add_argument('--set-ssh-key', action='store_true', help="Configure SSH key in oglive")
|
||||||
|
parser.add_argument('--oglive', type=int, metavar='NUM', help = "Do SSH key manipulation on this oglive")
|
||||||
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
@ -670,6 +742,12 @@ if __name__ == '__main__':
|
||||||
installer.add_forgejo_repo("linux")
|
installer.add_forgejo_repo("linux")
|
||||||
elif args.test_createuser:
|
elif args.test_createuser:
|
||||||
installer.set_ssh_user_group("oggit2", "oggit2")
|
installer.set_ssh_user_group("oggit2", "oggit2")
|
||||||
|
elif args.extract_ssh_key:
|
||||||
|
key = installer._extract_ssh_key()
|
||||||
|
print(f"Key: {key}")
|
||||||
|
|
||||||
|
elif args.set_ssh_key:
|
||||||
|
installer.set_ssh_key()
|
||||||
else:
|
else:
|
||||||
installer.install()
|
installer.install()
|
||||||
installer.install_forgejo()
|
installer.install_forgejo()
|
||||||
|
|
Loading…
Reference in New Issue