Как через paramiko получить значение консоли
Перейти к содержимому

Как через paramiko получить значение консоли

Get output from a Paramiko SSH exec_command continuously

I am executing a long-running python script via ssh on a remote machine using paramiko. Works like a charm, no problems so far.

Unfortunately, the stdout (respectively the stderr ) are only displayed after the script has finished! However, due to the execution time, I’d much prefer to output each new line as it is printed, not afterwards.

How can this be achieved? Note: Of course one could pipe the output to a file and ‘less’ this file via another ssh session, but this is very ugly and I need a cleaner, ideally pythonic solution 🙂

How to Execute Shell Commands in a Remote Machine using Python – Paramiko

Paramiko is a Python library that makes a connection with a remote device through SSh. Paramiko is using SSH2 as a replacement for SSL to make a secure connection between two devices. It also supports the SFTP client and server model.

Authenticating SSH connection

To authenticate an SSH connection, we need to set up a private RSA SSH key (not to be confused with OpenSSH). We can generate a key using the following command:

This will prompt us to provide a name for our key. Name it whatever you like and generate a public/private RSA key pair. Enter the name by which you wish to save the key.

Next, you’ll be prompted to provide a password (feel free to leave this blank).

Now that we have our key, we need to copy this to our remote host. The easiest way to do this is by using ssh-copy-id:

If you’d like to check which keys you already have, these can be found in your system’s .ssh directory:

We’re looking for keys that begin with the following header:

SSH(Secure Shell) is an access credential that is used in the SSH Protocol. In other words, it is a cryptographic network protocol that is used for transferring encrypted data over the network. It allows you to connect to a server, or multiple servers, without having you remember or enter your password for each system that is to log in remotely from one system into another.

Installing Paramiko

To install paramiko library, run the subsequent command in the command prompt. paramiko needs cryptography as a dependency module. So run both commands in the command prompt :

pip install paramiko

pip install cryptography

After installation is completed, now we’ll hook up with a remote SSH server using paramiko library. Code snippet for an equivalent is given below:

Запуск интерактивных команд в Paramiko

Я пытаюсь запустить интерактивную команду через paramiko. Выполнение cmd пытается запросить пароль, но я не знаю, как указать пароль через exec_command paramiko, и выполнение зависает. Есть ли способ отправить значения на терминал, если выполнение cmd ожидает ввода в интерактивном режиме?

Кто-нибудь знает, как это можно решить? Спасибо.

Вопрос старый, но для людей, которые все еще приходят сюда через поиск Google, я хочу дать им это. Ключ в том, чтобы получить свой собственный канал Выполнение интерактивных команд в Python через Paramiko, часть 1 Выполнение интерактивных команд в Python через Paramiko, часть 2 В этих двух видео объясняется, как запускать интерактивные команды через paramiko, особенно второе видео отличное и, вероятно, то, что вам нужно. — Mino_e

7 ответы

Полный дистрибутив paramiko поставляется с большим количеством полезных функций. демос.

В подкаталоге demos demo.py и interactive.py иметь полные интерактивные примеры TTY, которые, вероятно, были бы излишними для вашей ситуации.

В вашем примере выше ssh_stdin действует как стандартный файловый объект Python, поэтому ssh_stdin.write должен работать до тех пор, пока канал открыт.

Мне никогда не приходилось писать на стандартный ввод, но документы предполагают, что канал закрывается, как только команда завершает работу, поэтому использование стандартного stdin.write метод отправки пароля, вероятно, не сработает. На самом канале есть команды paramiko более низкого уровня, которые дают вам больше контроля — посмотрите, как SSHClient.exec_command метод реализован для всех кровавых деталей.

И для тех из вас, кто попал сюда, желая только увидеть, каким может быть вывод команды, некоторый код может быть таким: (stdin, stdout, stderr) = Client.exec_command(‘ls -la’) print(«\nstdout is:\n» + stdout.read() + «\nstderr is:\n» + stderr.read()) — Пол Хоффман

Исправлена ​​неработающая ссылка. — наука

У меня была такая же проблема, когда я пытался создать интерактивный сеанс ssh, используя SSH, вилка Парамико.

Я копался и нашел эту статью:

Чтобы продолжить свой пример, вы можете сделать

В статье более подробно описывается полностью интерактивная оболочка exec_command. Я нашел это намного проще в использовании, чем примеры в источнике.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *