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.libraries.configtask import config_task
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
import paramiko
import socket
@ -26,8 +29,8 @@ from collections import OrderedDict
from importlib import import_module, reload
from modules.pastafari2.libraries.progress import load_progress
from modules.pastafari2.libraries.load_task import load_db_in_task
from importlib import import_module
from subprocess import call
from settings import config
try:
import ujson as json
@ -48,6 +51,9 @@ t.env.directories.insert(1, os.path.dirname(__file__).replace('/admin', '')+'/te
system_path='./ssh/'
if hasattr(config, 'pastafari_system_path'):
system_path=config.pastafari_system_path
base_path='modules/pastafari2/tasks'
if hasattr(config, 'pastafari_base_path'):
@ -150,36 +156,37 @@ def pastafari2_edit_global_ssh_keys():
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'}
ssh_key_type=request.args.get('ssh_key_type')
if ssh_key_type in arr_type:
# -C "your_email@example.com" -f $HOME/.ssh/id_rsa
file_ssh_path='-f {}/id_rsa -q -N ""'.format(system_path)
if not os.path.isfile(system_path+'id_rsa'):
arr_type={'rsa': '-t rsa -b 4096', 'dsa': 'ssh-keygen -t dsa', 'ecdsa': 'ssh-keygen -t ecdsa -b 521', 'ed25519': 'ssh-keygen -t ed25519'}
ssh_key_type=request.args.get('ssh_key_type')
if ssh_key_type in arr_type:
if call(arr_type[ssh_key_type]+' '+file_ssh_path, shell=True) > 0:
file_ssh_path='-f {}/id_rsa -q -N ""'.format(system_path)
if not os.path.isfile(system_path+'id_rsa'):
error=1
else:
error=0
#try:
#key=paramiko.RSAKey.generate(2048)
#key=paramiko.Ed25519Key.generate()
#key.write_private_key_file(system_path+'id_rsa')
#with open(system_path+'id_rsa.pub',"w") as pub_key:
# pub_key.write("%s %s" % (key.get_name(), key.get_base64()))
#except:
# error=1
if call(arr_type[ssh_key_type]+' '+file_ssh_path, shell=True) > 0:
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'])
import_module('modules.pastafari2.admin.dashboard')
import_module('modules.pastafari2.admin.groups')
import_module('modules.pastafari2.admin.tasks')
print(config_admin)
"""
error=0
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)
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
@ -136,6 +136,9 @@ class Task:
"""
#if not os.path.isfile(self.private_key):
if check_ssh_host.lookup(self.server)==None:
# 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, 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:
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.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']]
@ -8,30 +15,37 @@ _=pgettext.gettext
#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')
def pastafari_settings():
def pastafari_settings_i18n():
return _('Settings')
def pastafari_servers():
def pastafari_servers_i18n():
return _('Servers')
def pastafari_groups():
def pastafari_groups_i18n():
return _('Groups')
def pastafari_tasks_log():
def pastafari_tasks_log_i18n():
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_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'])
config_admin.append([pastafari_settings_i18n(), 'modules.pastafari2.admin.dashboard', 'admin_app.pastafari2_settings', 'fa-code'])
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([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:
<p>
<select name="ssh_key_type" id="ssh_key_type">
<option value="rsa">RSA (more compatible)</option>
<option value="dsa">DSA</option>
<option value="ecdsa">ECDSA</option>
<option value="ed25519" selected>ED25519</option>
<option value="ed25519" selected>ED25519 (more secure)</option>
</select>
</p>
<p><input type="submit" value="${txt_generate_key_button}" /></p>