Fixes in ssh paramiko

This commit is contained in:
Antonio de la Rosa 2025-05-15 02:03:12 +02:00
parent 6cd4598708
commit 7c4895e32c
4 changed files with 69 additions and 40 deletions

View file

@ -17,6 +17,9 @@ from modules.pastafari2.libraries.task import Task as SSHTask
from modules.pastafari2.models.tasks import Task, LogTask from modules.pastafari2.models.tasks import Task, LogTask
from modules.pastafari2.libraries.configtask import config_task from modules.pastafari2.libraries.configtask import config_task
from modules.pastafari2.models.pastafari2 import ServerGroup, ServerDbTask, UpdateServerScripts from modules.pastafari2.models.pastafari2 import ServerGroup, ServerDbTask, UpdateServerScripts
from paramecio2.libraries.config_admin import config_admin
from modules.pastafari2.settings.config_admin import pastafari_admin_i18n, pastafari_admin_i18n, pastafari_settings_i18n, pastafari_servers_i18n, pastafari_groups_i18n, pastafari_tasks_log_i18n, num_element_admin
from pathlib import Path from pathlib import Path
import paramiko import paramiko
import socket import socket
@ -26,8 +29,8 @@ from collections import OrderedDict
from importlib import import_module, reload from importlib import import_module, reload
from modules.pastafari2.libraries.progress import load_progress from modules.pastafari2.libraries.progress import load_progress
from modules.pastafari2.libraries.load_task import load_db_in_task from modules.pastafari2.libraries.load_task import load_db_in_task
from importlib import import_module
from subprocess import call from subprocess import call
from settings import config
try: try:
import ujson as json import ujson as json
@ -48,6 +51,9 @@ t.env.directories.insert(1, os.path.dirname(__file__).replace('/admin', '')+'/te
system_path='./ssh/' system_path='./ssh/'
if hasattr(config, 'pastafari_system_path'):
system_path=config.pastafari_system_path
base_path='modules/pastafari2/tasks' base_path='modules/pastafari2/tasks'
if hasattr(config, 'pastafari_base_path'): if hasattr(config, 'pastafari_base_path'):
@ -150,36 +156,37 @@ def pastafari2_edit_global_ssh_keys():
error=1 error=1
# -C "your_email@example.com" -f $HOME/.ssh/id_rsa if not os.path.isfile(system_path+'id_rsa'):
arr_type={'dsa': 'ssh-keygen -t dsa', 'ecdsa': 'ssh-keygen -t ecdsa -b 521', 'ed25519': 'ssh-keygen -t ed25519'} # -C "your_email@example.com" -f $HOME/.ssh/id_rsa
ssh_key_type=request.args.get('ssh_key_type') arr_type={'rsa': '-t rsa -b 4096', 'dsa': 'ssh-keygen -t dsa', 'ecdsa': 'ssh-keygen -t ecdsa -b 521', 'ed25519': 'ssh-keygen -t ed25519'}
if ssh_key_type in arr_type: ssh_key_type=request.args.get('ssh_key_type')
file_ssh_path='-f {}/id_rsa -q -N ""'.format(system_path) if ssh_key_type in arr_type:
if not os.path.isfile(system_path+'id_rsa'): file_ssh_path='-f {}/id_rsa -q -N ""'.format(system_path)
if call(arr_type[ssh_key_type]+' '+file_ssh_path, shell=True) > 0: if not os.path.isfile(system_path+'id_rsa'):
error=1 if call(arr_type[ssh_key_type]+' '+file_ssh_path, shell=True) > 0:
else:
error=0
#try: error=1
else:
"""
config_admin.insert(num_element_admin-1, [pastafari_servers_i18n(), 'modules.pastafari2.admin.dashboard', 'admin_app.pastafari2_dashboard', 'fa-linux'])
config_admin.insert(num_element_admin, [pastafari_groups_i18n(), 'modules.pastafari2.admin.groups', 'admin_app.pastafari2_groups', 'fa-object-group'])
config_admin.insert(num_element_admin+1, [pastafari_tasks_log_i18n(), 'modules.pastafari2.admin.tasks', 'admin_app.pastafari2_tasks', 'fa-file-text-o'])
#key=paramiko.RSAKey.generate(2048) import_module('modules.pastafari2.admin.dashboard')
#key=paramiko.Ed25519Key.generate() import_module('modules.pastafari2.admin.groups')
#key.write_private_key_file(system_path+'id_rsa') import_module('modules.pastafari2.admin.tasks')
#with open(system_path+'id_rsa.pub',"w") as pub_key: print(config_admin)
# pub_key.write("%s %s" % (key.get_name(), key.get_base64())) """
#except: error=0
# error=1
return {'error': error} return {'error': error}

View file

@ -13,7 +13,7 @@ class Task:
#($server='', $ssh_user='root', $ssh_key_priv='./ssh/id_rsa', $ssh_key_password='', $ssh_path='leviathan', $mysql_conn=false) #($server='', $ssh_user='root', $ssh_key_priv='./ssh/id_rsa', $ssh_key_password='', $ssh_path='leviathan', $mysql_conn=false)
def __init__(self, server, conn, remote_user='root', remote_password='', private_key='./ssh/id_rsa', password_key='', remote_path='pastafari2', task_id=0, data={}, port=22): def __init__(self, server, conn, remote_user='root', remote_password='', private_key='./ssh/id_rsa', password_key=None, remote_path='pastafari2', task_id=0, data={}, port=22):
self.config=config_task self.config=config_task
@ -136,6 +136,9 @@ class Task:
""" """
#if not os.path.isfile(self.private_key):
if check_ssh_host.lookup(self.server)==None: if check_ssh_host.lookup(self.server)==None:
# Be tolerant for the first connect with hostkey policy # Be tolerant for the first connect with hostkey policy
@ -158,7 +161,11 @@ class Task:
#self.ssh.connect(self.server, port=self.port, username=self.remote_user, password=self.remote_password, pkey=rsa, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None) #self.ssh.connect(self.server, port=self.port, username=self.remote_user, password=self.remote_password, pkey=rsa, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None)
self.ssh.connect(self.server, port=self.port, username=self.remote_user, password=self.remote_password, key_filename=self.private_key, passphrase=self.password_key, timeout=None, allow_agent=False, look_for_keys=False, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None) if self.remote_password:
self.ssh.connect(self.server, port=self.port, username=self.remote_user, password=self.remote_password, timeout=None, allow_agent=False, look_for_keys=False, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None)
else:
self.ssh.connect(self.server, port=self.port, username=self.remote_user, key_filename=self.private_key, passphrase=self.password_key, timeout=None, allow_agent=False, look_for_keys=False, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None)
if add_host: if add_host:
host_key.save(self.config.ssh_directory+'/known_hosts') host_key.save(self.config.ssh_directory+'/known_hosts')

View file

@ -1,5 +1,12 @@
from paramecio2.libraries.config_admin import config_admin from paramecio2.libraries.config_admin import config_admin
from paramecio2.libraries.i18n import I18n, PGetText from paramecio2.libraries.i18n import I18n, PGetText
from settings import config
import os
system_path='./ssh/'
if hasattr(config, 'pastafari_system_path'):
system_path=config.pastafari_system_path
#modules_admin=[[I18n.lang('admin', 'users_admin', 'User\'s Admin'), 'paramecio.modules.admin.admin.ausers', 'ausers']] #modules_admin=[[I18n.lang('admin', 'users_admin', 'User\'s Admin'), 'paramecio.modules.admin.admin.ausers', 'ausers']]
@ -8,30 +15,37 @@ _=pgettext.gettext
#modules_admin=[[I18n.lang('admin', 'users_admin', 'User\'s Admin'), 'paramecio.modules.admin.admin.ausers', 'ausers']] #modules_admin=[[I18n.lang('admin', 'users_admin', 'User\'s Admin'), 'paramecio.modules.admin.admin.ausers', 'ausers']]
def pastafari_admin(): def pastafari_admin_i18n():
return _('Pastafari admin') return _('Pastafari admin')
def pastafari_settings(): def pastafari_settings_i18n():
return _('Settings') return _('Settings')
def pastafari_servers(): def pastafari_servers_i18n():
return _('Servers') return _('Servers')
def pastafari_groups(): def pastafari_groups_i18n():
return _('Groups') return _('Groups')
def pastafari_tasks_log(): def pastafari_tasks_log_i18n():
return _('Tasks log') return _('Tasks log')
config_admin.append([pastafari_admin()]) config_admin.append([pastafari_admin_i18n()])
config_admin.append([pastafari_settings(), 'modules.pastafari2.admin.dashboard', 'admin_app.pastafari2_settings', 'fa-code']) config_admin.append([pastafari_settings_i18n(), 'modules.pastafari2.admin.dashboard', 'admin_app.pastafari2_settings', 'fa-code'])
config_admin.append([pastafari_servers(), 'modules.pastafari2.admin.dashboard', 'admin_app.pastafari2_dashboard', 'fa-linux'])
config_admin.append([pastafari_groups(), 'modules.pastafari2.admin.groups', 'admin_app.pastafari2_groups', 'fa-object-group']) num_element_admin=len(config_admin)
#print(num_element_admin)
#if os.path.isfile(system_path+'id_rsa'):
config_admin.append([pastafari_servers_i18n(), 'modules.pastafari2.admin.dashboard', 'admin_app.pastafari2_dashboard', 'fa-linux'])
config_admin.append([pastafari_groups_i18n(), 'modules.pastafari2.admin.groups', 'admin_app.pastafari2_groups', 'fa-object-group'])
#config_admin.append([I18n.lang('pastafari2', 'tasks_edit', 'Tasks edit'), 'modules.pastafari2.admin.tasks_edit', 'admin_app.pastafari2_tasks_edit', 'fa-tasks']) #config_admin.append([I18n.lang('pastafari2', 'tasks_edit', 'Tasks edit'), 'modules.pastafari2.admin.tasks_edit', 'admin_app.pastafari2_tasks_edit', 'fa-tasks'])
config_admin.append([pastafari_tasks_log(), 'modules.pastafari2.admin.tasks', 'admin_app.pastafari2_tasks', 'fa-file-text-o']) config_admin.append([pastafari_tasks_log_i18n(), 'modules.pastafari2.admin.tasks', 'admin_app.pastafari2_tasks', 'fa-file-text-o'])

View file

@ -9,9 +9,10 @@
% if not regenerate: % if not regenerate:
<p> <p>
<select name="ssh_key_type" id="ssh_key_type"> <select name="ssh_key_type" id="ssh_key_type">
<option value="rsa">RSA (more compatible)</option>
<option value="dsa">DSA</option> <option value="dsa">DSA</option>
<option value="ecdsa">ECDSA</option> <option value="ecdsa">ECDSA</option>
<option value="ed25519" selected>ED25519</option> <option value="ed25519" selected>ED25519 (more secure)</option>
</select> </select>
</p> </p>
<p><input type="submit" value="${txt_generate_key_button}" /></p> <p><input type="submit" value="${txt_generate_key_button}" /></p>