LINUX.ORG.RU
ФорумAdmin

sshch - менеджер ssh соединений с curses интерфейсом

 , , ,


2

1

Давно хотел простую утилиту, для сокращения рутинных действий при администрировании по ssh. Раньше использовал для этого алиасы, отдельные скрипты, но решил потратить немного времени и сделать утилиту такой, какой я её хотел бы видеть. Предлагаю её вашему вниманию: https://github.com/zlaxy/sshch

Утилиту можно использовать как из командной строки (sshch -h для справки), так и через простой псевдографический интерфейс: https://raw.githubusercontent.com/zlaxy/sshch/master/sshch_screenshot.png

Для работы необходим python2.7 без необходимости установки дополнительных модулей.

При первом запуске sshch создаёт пустой конфигурационный файл в домашней папке пользователя, в котором будут храниться данные. Данные - это алиасы (имена для быстрого доступа), строки для соединения к ним и пароли для sshpass (пароли хранить не рекомендуется). Можно выбрать несколько алиасов и послать на них одну и ту же команду, можно это сделать сразу из командной строки:

sshch -c "uname -a" host1 host2 host3 host4

Соединения будут выполняться поочередно.

Если кто-то планирует пользоваться этим менеджером и ему необходим какой-то дополнительный функционал (например, параллельное подключение) - пишите или делайте ваши пуллреквесты.

Благодарю за внимание.


вроде был тег «я пеарюсь» или что-то подобное.

l0stparadise ★★★★★
()

А оно позволяет переходить между сессиями? Есть функция автоподключения? т.е. когда нет связи с хостом, а потом он появился и пусть сразу заходит

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Pro100User

Задача - быстрый доступ и выполнение команд на ssh хостах по алиасам или выбору из списка. Удобство - curses интерфейс, особенно удобен, на мой взгляд, если имеется список из нескольких десятков хостов, к которым подключение происходит достаточно редко, чтобы не запоминать алиасы.

federk
() автор топика
Ответ на: комментарий от pawnhearts

Не видел fabfile или ansible, предполагаю, что функционал sshch гораздо проще. Нужно для быстрого и, главное, наглядного доступа к часто выполняемым администраторами командам. Можно, например, одной командой обновить пакеты и перезагрузить сразу несколько VPS.

federk
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Нет, таких функций нет, но можно реализовать если кто-то кроме меня будет этим пользоваться.

federk
() автор топика
Ответ на: комментарий от federk

Я буду. У меня есть железь, которая часто нужно ребутить по мере разработки, устаю ждать момента логина, вот бы оно само лезло, скрипт что ли написать...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от federk

Можно было бы взять какой-нить https://github.com/junegunn/fzf или даже просто dialog.

Не видел fabfile или ansible

Через них можно выполнять команды на множестве хостов и не просто команды, а некоторые сценарии. Вот, например, простой деплой django проекта на fabric

from fabric.api import env, cd, prefix, local, run, sudo, shell_env, roles
from fabric.operations import get

env.roledefs = {
    'prod': ['user@host.ru'],
    'dev': ['dev@dev.host.ru'],
}

@roles('dev')
def install(package_name):
    run('sudo apt-get install %s' % package_name)

@roles('prod')
def deploy_production():
    PROJECT_DIR = '~/prj'
    VIRTUALENV_SHELL = "source ~/.virtualenvs/prj/bin/activate"
    SETTINGS_FILE = 'config.settings.settings_production'

    with cd(PROJECT_DIR):
        run("hg pull -u")
        with prefix(VIRTUALENV_SHELL):
            run('pip install -r ../requirements.txt')
            with shell_env(DJANGO_SETTINGS_MODULE=SETTINGS_FILE):
                run('python manage.py syncdb')
                run('python manage.py migrate')
                run('python manage.py collectstatic --noinput')
    run('touch ~/var/prj.touch')

pawnhearts ★★★★★
()
Ответ на: комментарий от l0stparadise

CC0 единственная из них нормальная, которая и должна использоваться для перевода в public domain, если так хочется. В WTFPL нету отказа от ответственности, в DWTWL явно прописано, что его нету (это странно). Обе никак не покрывают патенты. Ну и формулировки в них никак не юридические. Мне кажется, что юристам проще рекоммендовать их совсем не использовать, чем пытаться трактовать.

xaizek ★★★★★
()

CursesMain() жесть, я бы разбил на несколько мелких функций.

Имена не соответствуют pep8. В целом, я бы не советовал писать на сыром curses потому что это ахрененно отнимает время (я прав?). Есть несколько «движков» для текстовых интерфейсов. С ходу назову только urwid, но есть и другие, получше.

true_admin ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Добавил, постоянно возобновляемое соединение вызывается с ключом '-k'/'--keep', каждые 5 секунд будет пробовать переподключиться при потери соединения:

sshch -k alias
В псевдографическом интерфейсе, соответственно, надо нажать k или F7 на алиасе. Выйти - CTRL+C во время 5-секундного ожидания.

federk
() автор топика
Ответ на: комментарий от xaizek

Нравится DWTWL, она несёт в себе отзвук мистицизма.

federk
() автор топика
Ответ на: комментарий от true_admin

CursesMain() жесть, я бы разбил на несколько мелких функций.

Да, я тоже думал об этом, может позже. Это был готовый темплейт меню на curses, который нашёл вот здесь: https://stackoverflow.com/a/30828805/6224462

что это ахрененно отнимает время (я прав?).

Да, где-то 75% времени заняло ковыряние и отладка curses.

С ходу назову только urwid, но есть и другие, получше.

Да, они, несомненно, лучше, но не в ходят в стандартный пакет.

federk
() автор топика
Ответ на: комментарий от Difrex

Очень признателен, благодарю!

Сделал merge, в твоей версии отваливается panel (окно помощи 'h', подтверждение и ввод пароля), сделал этот кусок как было. И соединение, если не использовать переменную, лучше вызывать так:

subprocess.Popen(exec_string, shell=True).communicate()[0]
Иначе в stdout порядок строк путается при выводе.

federk
() автор топика
Ответ на: комментарий от federk

но не в ходят в стандартный пакет.

Практика показала что это очень плохая причина не использовать хорошие решения и писать костыли. С приходом virtualenv/tox/etc причин строго придерживаться только стандартной библиотеки почти не осталось.

true_admin ★★★★★
()

Полку велосипедов прибыло.

echo "HISTSIZE=5000"          >> .bashrc
echo "HISTFILESIZE=10000"  >> .bashrc
<Ctrl-R>
(reverse-i-search)`ssh':
<Ctrl-R>
<Ctrl-R>
$ dsh -g group-of-servers -c -M 'sudo apt-get upgrade -y'
anonymous
()
Ответ на: комментарий от anonymous

крутая штука dsh. Почему такая неизвестная? Искал нечто подобное ранее, не находилось

das_tier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.