Есть необходимость чтоб скрипт на сервере (А) запускал скрип на сервере (В) и получал ответ отработки от (В).
Раньше я смотрел в сторону поднятия на обоих машинах Sokect (Server-client)
Но ведь можно же достучаться из (А) примерно как-то так:
ssh://root@B.B.B.B/usr/bin/python3.4/python/usr/local/work
[/apcode]
- Есть ли какая нибудь библиотека типа sh, bash или это всё умеет os, sys?
- Далее нужно туда передать ещё пароль, это смотреть в man ssh?
- Без использования доступа по ключам.
Есть такая утилита — sshpass. Дает возможность передавать пароль параметром командной строки.
sudo apt-get install sshpass sshpass -p 'mypassword' ssh username@server.example.com
Но как уже говорилось — правильный способ, это доступ по ssh ключу.
Насколько мне известно, ssh
не имеет способа принять пароль через параметр командной строки, поэтому без использования дополнительных средств не обойтись.
Для Python существует библиотека paramiko, позволяющая работать с SSH.
Выглядеть это будет таким образом:
import paramiko server_auth = { 'hostname': '<hostname>', 'username': '<username>', 'password': '<password>', 'port': <port> } with paramiko.SSHClient() as ssh: ssh.connect(**server_auth) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) stdin, stdout, stderr = ssh.exec_command('python script.py') print(stdout.read().decode()) # читать нужно, пока открыт ssh
При этом stdin
, stdout
и stderr
ведут себя, как файлы. Если вам требуется что-то передать на стандартный вход программе, пишите в stdin
; если требуется что-то получить от скрипта, читайте из stdout
; если хотите контролировать поток ошибок программы, используйте stderr
.
Дополнительные ссылки:
-
Статья на хабре про библиотеку (в комментариях описаны ссылки на дополнительные способы решения задачи)
самый простой способ — копируем скрипт на удаленный сервер (это можно сделать как ручками, так и с помощью scp). А потом просто выполняем команду вида ssh user@server 'python script.py'
. Ответ будет выдан в STDOUT, поэтому его легко получить (точно также, как от любой другой программы, которая запускается локально).
Если скрипт генерируется ручками каждый раз и копировать лень (бывает), то выполняем например так cat script | ssh user@server 'python'
. В случае с перлом, нужно писать ещё минус, что бы он понимал, что файл пришел с пайпа (perl -
).
И последнее — пароль. Если скрипт должен выполнятся без участия пользователя — настройте ssh логин по ключу. Это самый правильный и простой способ. Как настроить доступ по ключам.