Вложенная сессия SSH с Paramiko

Для тех из вас, кто пробовал все вышеперечисленные ответы без каких-либо успехов, попробуйте снизить значение -Xms. Я должен поддерживать более старый Eclipse (Weblogic Eclipse 10.3.6). У меня был следующий .ini на моей машине с Windows 7 и моей виртуальной машиной Windows Server 2008 R2 (версия Java ниже указывает на 32-разрядную Java), которая работали и отлично работали соответственно.

-vm
C:/Java/Java7/jdk1.7.0_79/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vmargs
-Xms1024m
-Xmx1024m
-XX:MaxPermSize=256m
-Dsun.lang.ClassLoader.allowArraySyntax=true
-Dweblogic.home=C:/Oracle/Middleware/wlserver_10.3

Итак, 32-разрядная Java для 32-разрядного Eclipse, но все же код выхода 1. Основываясь на всех ответах, которые я видел здесь, и единственное изменение будучи новым ноутбуком с Windows 10, единственным возможным объяснением было то, что новая ОС и Eclipse не соглашались на что-то. Поэтому я начал играть с каждым из значений, и это сработало, когда я опустил Xms и Xmx до 512m. У меня есть подозрение, что, возможно, новая ОС Windows предотвращает более высокий начальный размер кучи на основе некоторого условия выполнения (более высокие -Xms работают в Windows 10 на всех других подобных устройствах, с которыми я сталкивался), поэтому любое другое объяснение приветствуется. Тем временем следующее единственное значение, которое я настроил для успешного запуска Eclipse.

-Xms512m 
31
задан mqsoh 16 December 2009 в 01:28
поделиться

2 ответа

Мне удалось найти решение, но это требует небольшой ручной работы. Если у кого-то есть лучшее решение, скажите мне.

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('first.com', username='luser', password='secret')

chan = ssh.invoke_shell()

# Ssh and wait for the password prompt.
chan.send('ssh second.com\n')
buff = ''
while not buff.endswith('\'s password: '):
    resp = chan.recv(9999)
    buff += resp

# Send the password and wait for a prompt.
chan.send('secret\n')
buff = ''
while not buff.endswith('some-prompt$ '):
    resp = chan.recv(9999)
    buff += resp

# Execute whatever command and wait for a prompt again.
chan.send('ls\n')
buff = ''
while not buff.endswith('some-prompt$ '):
    resp = chan.recv(9999)
    buff += resp

# Now buff has the data I need.
print 'buff', buff

ssh.close()

Следует отметить, что вместо этого

t = ssh.get_transport()
chan = t.open_session()
chan.get_pty()

... вы хотите это

chan = ssh.invoke_shell()

Это напоминает мне о том, как я пытался написать сценарий TradeWars, когда я был ребенок и отказался от программирования на десять лет. :)

29
ответ дан 27 November 2019 в 20:45
поделиться

Готовое решение можно найти в pxssh из проекта pxpect. Посмотрите примеры sshls.py и ssh_tunnel.py.

http://www.noah.org/wiki/Pexpect

1
ответ дан 27 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: