SSH annidato con Paramiko e file di chiavi RSA

Aug 21 2020

Sto provando a nidificare SSH usando Paramiko dove mi collegherò al Server X dalla mia macchina locale e da lì mi collegherò al Server Y. Qui per connettermi al Server X sto usando nome utente, autenticazione password e per connettermi al Server Y usando nome utente e Chiave RSA. Il fatto è che la chiave RSA è ospitata nel sistema X che viene utilizzato per connettere il server Y. Sono stato in grado di eseguire lo script con successo se ho ospitato il file di chiavi nel mio PC locale e ho fornito il percorso della directory del PC locale al client SSH Paramiko. Ma voglio leggere direttamente il file della chiave dal server X. Come posso farlo per favore aiutami.

File di chiavi del server X = "/ home / test / keys / id_rsa"

import time
import paramiko,io
import csv
import sys
import subprocess

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('X',22, username='subhash', password='mit@12345')

vmtransport = ssh.get_transport()
dest_addr = ('Y', 22)
local_addr = ('X', 22)
vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr, local_addr)

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

remote_file = paramiko.RSAKey.from_private_key_file('C:/Users/test/Documents/hindi/id_rsa')
client.connect('Y', username='root',pkey=remote_file,sock=vmchannel)

client_stdin ,client_stdout, client_stderr = client.exec_command("pwd")

Risposte

1 MartinPrikryl Aug 21 2020 at 19:51

Non è possibile utilizzare il port forwarding per implementare il jump, se è necessario utilizzare una chiave privata memorizzata sul jump server.

  • Scarica la chiave sul computer locale. Se non desideri archiviare fisicamente la chiave sul computer locale, puoi scaricarla in memoria solo nel codice Python. Vedere Caricamento della chiave da un jumphost SSH utilizzando Paramiko .

  • Altrimenti dovresti implementare il jump eseguendo il sshclient sul jump server, che raccoglierà la chiave privata memorizzata lì (che normalmente è una soluzione scadente):

    ssh.exec_command("ssh root@Y pwd")