ParamikoおよびRSAキーファイルを使用したネストされたSSH

Aug 21 2020

Paramikoを使用してSSHをネストしようとしています。ローカルマシンからサーバーXに接続し、そこからサーバーYに接続します。ここでサーバーXIに接続するには、ユーザー名とパスワード認証を使用し、ユーザー名とを使用してサーバーYに接続します。 RSAキー。RSAキーはサーバーYの接続に使用されるシステムXでホストされています。ローカルPCでキーファイルをホストし、ローカルPCディレクトリパスをParamiko SSHクライアントに指定すると、スクリプトを正常に実行できました。しかし、サーバーXから直接キーファイルを読み取りたいのですが。どうすればそれができますか私を助けてください。

サーバー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")

回答

1 MartinPrikryl Aug 21 2020 at 19:51

ジャンプサーバーに保存されている秘密鍵を使用する必要がある場合は、ポート転送を使用してジャンプを実装することはできません。

  • キーをローカルマシンにダウンロードします。キーをローカルマシンに物理的に保存したくない場合は、Pythonコードでのみメモリにダウンロードできます。Paramikoを使用したSSHジャンプホストからのキーのロードを参照してください。

  • それ以外の場合はssh、ジャンプサーバーでクライアントを実行してジャンプを実装する必要があります。これにより、そこに保存されている秘密鍵が取得されます(通常は不完全なソリューションです)。

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