Comments 15
«исправить строчку №12 в конфигурационном файле» или «заменить файл „version_017“ на „version_018“
звучит как «нам нужна VCS» =)
client.connect(hostname='192.168.0.8', username='login', password='password'
вот прям так у вас в скрипте и лежит?
звучит как «нам нужна VCS» =)
client.connect(hostname='192.168.0.8', username='login', password='password'
вот прям так у вас в скрипте и лежит?
Спасибо за статью. Мои 5 копеек: насколько я знаю, версии paramiko для python3 еще нет (и не известно, когда будет). Есть только несколько сторонних давно заброшенных портов.
Попробуйте fabric. Он кстати внутри тоже paramiko использует.
уже не использует, они на pypi.python.org/pypi/ssh перешли (будет в след версии), теперь конфиги ssh не игнорятся
Статья практически туториал по парамико…
Для целей: «поменять 3 строчки» используйте fabric, быстрее, проще, надежнее
Для целей: «поменять 3 строчки» используйте fabric, быстрее, проще, надежнее
Сам использую paramico, довльно удобно. Но для описавыемых вами задач менеджмента большого парка серверов («исправить строчку №12 в конфигурационном файле» или «заменить файл „version_017“ на „version_018“.) лучше использовать chef или puppet.
libbsh2 биндинговые либы намного стабильнее имхо.
Пробовал и paramiko, и pylibssh2
Пробовал и paramiko, и pylibssh2
И это правильно, и это красиво.
Но где шагов побольше и нужно какая-то логика, я применяю библиотеку net-ssh-telnet на руби. Приведу здесь же для коллекции и сравнения.
Хотя в целом это оболочка для упрощения net-ssh. Основной пакет поддерживает и scp, и sftp, и проброску туннелей, и вообще все что угодно.
Но где шагов побольше и нужно какая-то логика, я применяю библиотеку net-ssh-telnet на руби. Приведу здесь же для коллекции и сравнения.
require 'net/ssh'
require 'net/ssh/telnet'
s = Net::SSH.start('hostname', 'user', :password => 'secret')
t = Net::SSH::Telnet.new("Session" => s)
t.cmd("su - another_user") # можно переключиться на другой аккаунт
puts t.cmd("ls -l") # и вывести stdout удаленной команды
Хотя в целом это оболочка для упрощения net-ssh. Основной пакет поддерживает и scp, и sftp, и проброску туннелей, и вообще все что угодно.
Лично мне fabric не подошел, когда нужно было автоматизировать обновлений на сетевых устройствах cisco.
Пока остановился на exscript-е github.com/knipknap/exscript
Но его еще нужно доводить до ума, чтобы было можно работать с Cisco ASA например. (или с чем другим, где нет стандартного shell-а или стандартного приглашения)
Пока остановился на exscript-е github.com/knipknap/exscript
Но его еще нужно доводить до ума, чтобы было можно работать с Cisco ASA например. (или с чем другим, где нет стандартного shell-а или стандартного приглашения)
> Возможно, я недоразобрался, но у меня не получилось получить права рута на уделенном сервере.
Не работать может по нескольким причинам, вероятно stderr.read() вернет 'sudo: no tty present and no askpass program specified\n', т.е. нужен псевдотерминал.
У SSHClient нет (или я плохо искал?) возможности получить pty, но можно воспользоваться классом Channel, экземпляр которого легко получить из SSHClient. Код ниже иллюстрирует данный способ:
Код отлаживал в терминале, кажется ничего не пропустил при копировании. В реальных условиях нужно смотреть, что sudo отдает в stdin и stderr и писать в stdin только в ответ на «вопросы».
Не работать может по нескольким причинам, вероятно stderr.read() вернет 'sudo: no tty present and no askpass program specified\n', т.е. нужен псевдотерминал.
У SSHClient нет (или я плохо искал?) возможности получить pty, но можно воспользоваться классом Channel, экземпляр которого легко получить из SSHClient. Код ниже иллюстрирует данный способ:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(...)
channel = сlient.get_transport().open_session()
channel.get_pty()
channel.settimeout(5)
channel.exec_command('sudo ls')
channel.send(password+'\n')
print channel.recv(1024)
channel.close()
client.close()
Код отлаживал в терминале, кажется ничего не пропустил при копировании. В реальных условиях нужно смотреть, что sudo отдает в stdin и stderr и писать в stdin только в ответ на «вопросы».
Я бы не назвал chef и puppet библиотеками для работы по ssh :)
А еще на основе paramiko есть библиотечка для создания SSH тоннелей
Например:
Например:
pip install sshtunnel
python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost
Sign up to leave a comment.
Работа с ssh в Python