Ответ 1
Конечно, есть несколько способов сделать это!
Допустим, у вас есть Raspberry Pi на хосте raspberry.lan
и ваше имя пользователя - irfan
.
подпроцесс
Это библиотека Python по умолчанию, которая запускает команды.
Вы можете заставить его запускать ssh
и делать все, что вам нужно на удаленном сервере.
в его ответе есть царапина. Вам определенно следует сделать это, если вы не хотите использовать какие-либо сторонние библиотеки.
Вы также можете автоматизировать ввод пароля/парольной фразы с помощью pexpect
.
paramiko
paramiko
- сторонняя библиотека, которая добавляет поддержку протокола SSH, поэтому она может работать как SSH-клиент.
Пример кода, который будет подключаться к серверу, выполнять и ls -l
результаты команды ls -l
будет выглядеть так:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('raspberry.lan', username='irfan', password='my_strong_password')
stdin, stdout, stderr = client.exec_command('ls -l')
for line in stdout:
print line.strip('\n')
client.close()
ткань
Вы также можете добиться этого с помощью fabric
.
Fabric - это инструмент развертывания, который выполняет различные команды на удаленных серверах.
Он часто используется для запуска чего-либо на удаленном сервере, так что вы можете легко поместить свою последнюю версию веб-приложения, перезапустить веб-сервер и все остальное с помощью одной команды. На самом деле, вы можете запустить одну и ту же команду на нескольких серверах, и это здорово!
Хотя он был создан как инструмент для развертывания и удаленного управления, вы все равно можете использовать его для выполнения основных команд.
# fabfile.py
from fabric.api import *
def list_files():
with cd('/'): # change the directory to '/'
result = run('ls -l') # run a 'ls -l' command
# you can do something with the result here,
# though it will still be displayed in fabric itself.
Это похоже на ввод cd/
и ls -l
на удаленном сервере, поэтому вы получите список каталогов в корневой папке.
Затем запустите в оболочке:
fab list_files
Он запросит адрес сервера:
No hosts found. Please specify (single) host string for connection: [email protected]
Небольшое примечание: Вы также можете назначить имя пользователя и право хоста в команде fab
:
fab list_files -U irfan -H raspberry.lan
Или вы можете поместить хост в переменную env.hosts
в вашем fabfile. Вот как это сделать.
Затем вам будет предложено ввести пароль SSH:
[[email protected]] run: ls -l
[[email protected]] Login password for 'irfan':
И тогда команда будет выполнена успешно.
[[email protected]] out: total 84
[[email protected]] out: drwxr-xr-x 2 root root 4096 Feb 9 05:54 bin
[[email protected]] out: drwxr-xr-x 3 root root 4096 Dec 19 08:19 boot
...