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'
вот прям так у вас в скрипте и лежит?
+3
Спасибо за статью. Мои 5 копеек: насколько я знаю, версии paramiko для python3 еще нет (и не известно, когда будет). Есть только несколько сторонних давно заброшенных портов.
0
Попробуйте fabric. Он кстати внутри тоже paramiko использует.
+5
уже не использует, они на pypi.python.org/pypi/ssh перешли (будет в след версии), теперь конфиги ssh не игнорятся
0
Статья практически туториал по парамико…
Для целей: «поменять 3 строчки» используйте fabric, быстрее, проще, надежнее
Для целей: «поменять 3 строчки» используйте fabric, быстрее, проще, надежнее
+2
Сам использую paramico, довльно удобно. Но для описавыемых вами задач менеджмента большого парка серверов («исправить строчку №12 в конфигурационном файле» или «заменить файл „version_017“ на „version_018“.) лучше использовать chef или puppet.
+1
libbsh2 биндинговые либы намного стабильнее имхо.
Пробовал и paramiko, и pylibssh2
Пробовал и paramiko, и pylibssh2
0
UFO just landed and posted this here
И это правильно, и это красиво.
Но где шагов побольше и нужно какая-то логика, я применяю библиотеку 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, и проброску туннелей, и вообще все что угодно.
0
Лично мне fabric не подошел, когда нужно было автоматизировать обновлений на сетевых устройствах cisco.
Пока остановился на exscript-е github.com/knipknap/exscript
Но его еще нужно доводить до ума, чтобы было можно работать с Cisco ASA например. (или с чем другим, где нет стандартного shell-а или стандартного приглашения)
Пока остановился на exscript-е github.com/knipknap/exscript
Но его еще нужно доводить до ума, чтобы было можно работать с Cisco ASA например. (или с чем другим, где нет стандартного shell-а или стандартного приглашения)
0
> Возможно, я недоразобрался, но у меня не получилось получить права рута на уделенном сервере.
Не работать может по нескольким причинам, вероятно 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 только в ответ на «вопросы».
0
Я бы не назвал chef и puppet библиотеками для работы по ssh :)
0
А еще на основе paramiko есть библиотечка для создания SSH тоннелей
Например:
Например:
pip install sshtunnel
python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost
0
Sign up to leave a comment.
Работа с ssh в Python