Как указать удаленную оболочку в ткани 2.4 - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно подключиться через SSH к удаленному хосту из Python.Я выбрал фабрику 2.4, потому что она может запускать несколько команд в одной ssh-сессии.Но мне нужно использовать удаленную оболочку, отличную от sh / bash / etc, моя оболочка работает на основе clixon.

Все примеры, которые я нашел, описывали изменение оболочки в матрице 1.X.

Как я могу настроить его в матрице 2.4?

Или, может быть, вы можете посоветовать другую библиотеку ssh для python, которая может выполнять несколько команд в одной сессии ssh?

PS Я не могу изменить значение по умолчаниюоболочка для пользователя в /etc/passwd.

1 Ответ

0 голосов
/ 22 мая 2019

Я нашел обходной путь с paramiko (используя каналы):

class ParamikoWraper:
    def __init__(self, host, user, password, port=22):
        self.client = paramiko.SSHClient()
        self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.client.connect(host, username=user, password=password, port=port)
        self.channel = self.client.invoke_shell()
        self.stdin = self.channel.makefile('wb')
        self.stdout = self.channel.makefile('r')

    def __del__(self):
        self.client.close()

    def run(self, command):
        command = command.strip('\n')
        self.stdin.write(command + '\n')
        self.stdin.flush()
        time.sleep(1)

    return command, ""


remote = ParamikoWraper('192.168.33.10', "vagrant", "qwerty")
remote.run("sudo -s")  # start shell

for cmd in ["echo $(whoami) >> /root/test", "echo 2 >> /root/test", "echo 3 >> /root/test"]:
    print(remote.run(cmd))
...