0

ジャンプサーバーへの SSH が必要です。jumpserver からホストに SSH で接続し、次のコマンドを実行します。grep package' を実行して、出力を取得します。完了したら、最初にホストから正常にログアウトしてから、ジャンプサーバーからログアウトします。

以下は、これまでに試したことです。

Import pexpect

options = '-q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no'

child = pexpect.spawn('ssh ssheth@jumpserver %s'%(options), timeout=None)
child.expect(['password: '])
child.sendline('hello123')
child.expect('#')
child.sendline('ssh ssheth@host "rpm -qa | grep -v watch | grep extractor"')
child.expect(['password: '])
child.sendline(password)
child.logfile = fout
child.expect(".*\$ ", timeout=None)
child.close()

これにより、以下の例外がスローされます。

Timeout exceeded in read_nonblocking().
<pexpect.spawn object at 0x7f007800d190>
version: 2.4 ($Revision: 516 $)
command: /usr/bin/ssh
args: ['/usr/bin/ssh', 'ssheth@jumpserver', '-q', '-oStrictHostKeyChecking=no', '-oUserKnownHostsFile=/dev/null', '-oPubkeyAuthentication=no']
searcher: searcher_re:
    0: re.compile("#")
buffer (last 100 chars): ssheth@jumpserver:~[ssheth@jumpserver ~]$ 
[ssheth@jumpserver ~]$ 
before (last 100 chars): ssheth@jumpserver:~[ssheth@jumpserver ~]$ 
[ssheth@jumpserver ~]$ 
after: <class 'pexpect.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 27286
child_fd: 91
closed: False
timeout: 2
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
4

2 に答える 2

1

最も簡単な答えは、リモート サーバーへのポート転送を開くことです。

これは bash で最もうまく機能しますが、サブプロセスを実行したり、Python で実行したいものを何でも実行したりできます。

IP が次のとおりであるとします。

  • jumpserver IP は 151.121.121.121 です
  • 最終サーバーの IP は 10.1.2.3 です

次のように

# Open a local port 13000 that will map through jumpserver and 
# connect to finalserver on port 22
ssh -L 13000:10.1.2.3:22 username@151.121.121.121
# Then open an ssh session to localhost:13000 (which will forward to the
# finalserver.com and run your command)
ssh username@localhost -p 13000 'rpm -qa | grep package'

余談ですが、expect スクリプトを見て昔を思い出してください。Python にはいくつかの ssh ラッパーがあります。ParamikoFabricと共に使用されます。

于 2013-07-28T23:30:11.980 に答える