подключиться к замазке, используя тот же вход в сеанс на 2-й сервер Linux через python

Есть ли способ:
1. откройте сеанс шпатлевки/plink и войдите на сервер Linux через python
2. в текущем сеансе войдите на другой сервер Linux через python
3. оставить сеанс шпатлевки открытым и доступным для пользователя для запуска других команд вручную?

Примечания:
- Сценарий должен работать на компьютере с Windows, обращающемся к серверу Linux через шпатлевку.
- 1 было легко с subprocess.Popen().
- Я застрял с отправкой пароля для следующего входа на сервер. Ключи RSA ssh ограничены на наших серверах.

Есть идеи? Может быть другая альтернатива скрипту python?


person Nat    schedule 12.07.2012    source источник
comment
Правильно ли я понимаю, что вы хотите перейти с компьютера с Windows на Linux-сервер A, а затем из этого сеанса SSH подключиться с Linux-сервера A к Linux-серверу B?   -  person ernie    schedule 12.07.2012
comment
совершенно верно. Ну, я подумал еще раз, так что это может быть то же самое, но с Linux-машины 0 (на машину A и оттуда на машину B)   -  person Nat    schedule 01.08.2012


Ответы (1)


Да, ты можешь это сделать. Используйте 1_.

Но я должен отметить, что вы не можете использовать pexpect в Windows без установки cygwin. Если вы хотите запустить свою программу непосредственно в Windows без cygwin, вам нужно использовать winexpect (https://bitbucket.org/geertj/winpexpect/wiki/Home).

пример использования:

#!/usr/bin/env python
import pexpect

ssh_newkey = 'Are you sure you want to continue connecting'
# my ssh command line
p=pexpect.spawn('ssh [email protected] uname -a')

i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
    print "I say yes"
    p.sendline('yes')
    i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
    print "I give password",
    p.sendline("mypassword")
    p.expect(pexpect.EOF)
elif i==2:
    print "I either got key or connection timeout"
    pass
print p.before # print out the result

В вашем случае вы должны использовать plink вместо ssh и winexpect вместо pexpect.

person Igor Chubin    schedule 12.07.2012
comment
большое спасибо Игорь, полезный модуль. Он работал по ssh и выполнял любые команды. даже обогнать сеанс с помощью p.interact(). Момент, когда я застрял с ним, вводит второй пароль. Это может быть глупой проблемой, но я не вижу причины. Так, например (сделал это максимально простым): - person Nat; 01.08.2012
comment
все хорошо. Итак, теперь я хочу скопировать файл с другого компьютера, для которого потребуется пароль: - person Nat; 01.08.2012
comment
Он находит пароль с помощью expect, но не вставляет пароль. Странно, потому что он вводит пароль без проблем в первый раз, когда ssh-ing - person Nat; 01.08.2012