Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 2, 2019 18:33:34

Kirill_Anisimov_+1
Зарегистрирован: 2016-03-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

paramiko: Открыть ssh соединение внутри уже открытого ssh

Всем привет!

Может быть кто-то поможет мне решить проблему. В настоящий момент я подключаюсь по ssh на удаленную машину и с нее подключаюсь по ssh к объекту, который на ней работает и далее выполняю специфические для него команды.

Выглядит это примерно вот так

 ssh -i filename username_1@hostname1
 ssh -l username_2 localhost -p 5555
 >>> My command

Я хочу автоматизировать этот процесс через paramiko, но что-то пошло не так. Гуглил решения на стэковерфлоу. Код получился следующий:
  #!/usr/bin/env python
# -*- coding: utf-8 -*-
import paramiko as ssh
class SSHTool():
    def __init__(self, host, user, auth, via=None, via_user=None, via_key=None):
        if via:
            t0 = ssh.Transport(via)
            t0.start_client()
            t0.auth_publickey(via_user, via_key)
            channel = t0.open_channel('direct-tcpip', host, ('127.0.0.1', 1234))
            self.transport = ssh.Transport(channel)
        else:
            self.transport = ssh.Transport(host)
        self.transport.start_client()
        self.transport.auth_password(user, auth)
    def run(self, cmd):
        ch = self.transport.open_session()
        ch.set_combine_stderr(True)
        ch.exec_command(cmd)
        retcode = ch.recv_exit_status()
        buf = ''
        while ch.recv_ready():
            buf += ch.recv(1024)
        return (buf, retcode)
host = ('localhost', 5555)
via_host = ('hostname1', 22)
pk = ssh.RSAKey.from_private_key(open('./filename'))
ssht = SSHTool(host, 'username_2', 'password', via=via_host, via_user='username_1', via_key=pk)
print ssht.run('My command')

В итоге получаю ошибку, к которой не могу найти решения:

 No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last):
  File "C:\Users\kirill.anisimov\Documents\Corda\sshish\ssh_tool.py", line 33, i
n <module>
    ssht = SSHTool(host, 'user', 'password', via=via_host, via_user='kanisimov',
 via_key=pk)
  File "C:\Users\kirill.anisimov\Documents\Corda\sshish\ssh_tool.py", line 12, i
n __init__
    channel = t0.open_channel('direct-tcpip', host, ('127.0.0.1', 1234))
  File "C:\Python27\lib\site-packages\paramiko\transport.py", line 1017, in open
_channel
    raise e
paramiko.ssh_exception.ChannelException: ChannelException(1, 'Administratively p
rohibited')

Может быть кто-то подскажет в чем ошибка?
Или предложит другое решение для данной задачи.
Спасибо!

Отредактировано Kirill_Anisimov_+1 (Сен. 2, 2019 18:40:16)

Офлайн

#2 Сен. 2, 2019 18:55:36

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

paramiko: Открыть ssh соединение внутри уже открытого ssh

первый вариант самый простой - раз вы уже знаете как работать через утилиту ssh, то может и стоит вызывать ее из питона через subprocess? Есть ли действительно необходимость через это средствами питона?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Сен. 2, 2019 19:19:33

Kirill_Anisimov_+1
Зарегистрирован: 2016-03-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

paramiko: Открыть ssh соединение внутри уже открытого ssh

JOHN_16
первый вариант самый простой - раз вы уже знаете как работать через утилиту ssh, то может и стоит вызывать ее из питона через subprocess?
Спасибо! Посмотрю, попробую.

JOHN_16
Есть ли действительно необходимость через это средствами питона?
Много команд приходится выполнять руками. Муторно, надоедает)

Офлайн

#4 Сен. 2, 2019 22:53:55

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

paramiko: Открыть ssh соединение внутри уже открытого ssh

ну так для этого же не обязательно Python использовать. Если у вас там unix подобное можно shell скрипты сделать.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version