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")