- Автоматическое подключение по ssh из скрипта
- Первая задача
- Вторая задача
- Третья задача
- Автовход с паролем и управление по ssh «в гостях» при помощи expect
- Немного истории и оффтопика
- Задача
- Варианты решения
- Решение через expect
- Заключение
- Запуск команд или скрипта через SSH
- Запуск команд через SSH
- Запуск нескольких команд через SSH
- Практические примеры использования SSH
- SSH: Запуск Bash Скрипта
- Скрипт подключения по ssh linux
- Bash script ssh с использованием expect
- Описание ssh скрипта
- Как подключиться по SSH
- Что такое SSH?
- Как подключиться по SSH
- 1. Подключение через SSH в Linux
- 2. Подключение через SSH в Windows
- Выводы
Автоматическое подключение по ssh из скрипта
При первом подключении к серверу, нужно ответить «yes», что означает — мы доверяем этому серверу. Кроме того, при изменении ключа сервера, надо удалить старый ключ из файла known_hosts . Если аутентификация по ключу в силу каких-то причин невозможна, нужно как-то передать пароль ssh-клиенту. При подключении к серверу из shell-скрипта, нам нужно решить эти три задачи.
Первая задача
Для предотвращения атак «человек посередине» при подключении к серверу, ключ которого ещё не известен ssh-клиенту, будет показан «слепок ключа» (key fingerprint). Нам нужно сравнить этот слепок со слепком ключа сервера, который мы получили по надежному каналу связи. И только после этого ответить «yes» — мы доверяем этому серверу. Выглядит это примерно так:
При утвердительном ответе yes , ssh-клиент продолжит подключение, сохранив ключ сервера в файле
/.ssh/known_hosts . В противном случае подключение к серверу будет прервано. Чтобы это обойти, нужно добавить опцию StrictHostKeyChecking , которая отключает проверку и сразу добавляет ключ сервера в файл
Вторая задача
При попытке подключения после изменения ключа на удаленном сервере (это происходит при переустановке операционной системы или пакета openssh-server ), появляется сообщение с ошибкой:
В сообщении можно увидеть, что вторая строка файла
/.ssh/known_hosts содержит неправильный ключ. И подсказку, как удалить этот ключ (неправильную строку):
Неправильная строка теперь удалена, а исходный файл на всякий случай сохранён под именем known_hosts.old . Еще раз пробуем подключиться:
Но удаление записи в файле known_hosts требует ручного вмешательства, а нам нужно, чтобы подключение к серверу происходило из скрипта, без нашего участия. И здесь на помощь приходит еще одна опция — UserKnownHostsFile . Можно вообще не записывать ключ сервера в файл known_hosts , указав значение этой опции как /dev/null . Тогда и удалять неправильный ключ будет не нужно:
Третья задача
Теперь почти все хорошо, осталось еще решить вопрос с паролем. В этом нам поможет утилита sshpass :
Вот так можно передать пароль ssh-клиенту, чтобы он мог подключиться к серверу:
Также, пароль можно записать в файл, только не забыть выставить для него права:
Опции StrictHostKeyChecking и UserKnownHostsFile могут быть заданы постоянно в
/.ssh/config (для текущего пользователя) или в /etc/ssh/ssh_config (для всех пользователей).
Теперь подключаться к серверу 123.123.123.123 можно так:
Но тут надо учитывать, от имени какого пользователя будет запускаться скрипт. Например, если скрипт запускается от root , то и файл конфигурации должен быть размещен в /root/.ssh/config . Иначе нужно явно указать, где расположен файл с настройками ssh-клиента:
Источник
Автовход с паролем и управление по ssh «в гостях» при помощи expect
В очередной раз используя этот скрипт в одном из учебных классов, я поискал материалы и обнаружил, что здесь давно не вспоминали об expect. Это замечательный альтернативный интерпретатор для командной строки Linux, который может общаться с ней вместо живого человека, и я добавлю сюда лишь ещё один пример его применения.
Картинок на эту тему особо нет, а в статье и вообще не будет, поэтому привлечём ваше внимание обложкой замечательной книги
Немного истории и оффтопика
В начале 2013го я вернулся в дополнительное образование детей, получил 24 часа еженедельной нагрузки для четырёх групп «юных программистов» и «юных системных администраторов», и приступил к набору учеников на двух площадках: моём собственном кабинете и кабинете информатики находящейся неподалёку гимназии. Силами групп «юных системных администраторов» мы привели свой кабинет в порядок, развернув AltLinux 6 и парочку альтернативных дистрибутивов. А в гимназии очень опытный «инженер компьютерного класса» давно вёл эксперименты с source-based, закончившиеся приходом Calculate Linux на все машины учителей и учебных классов. Респект ему)
Задача
Через пару месяцев занятий я увидел проблему. Дети отказывались уходить с занятий, любым способом стараясь задержаться подольше. Т.к. педагогические технологии — это не моё, а кружок у нас всё-таки технический, я убивал сторонние процессы и выключал машины по ssh. Это повысило интерес учеников к изучению возможностей командной строки. Однако скоро они нашли баг: выключение «руками» занимает слишком много времени, и даже в небольшом кабинете они успеют перезапустить половину машин до того, как я завершу карательный процесс, и это затянет дело. Чтобы продемонстрировать кто здесь главный лучшие возможности программирования для командной строки, я задумался об автоматизации.
Варианты решения
Нулевой мыслью было использование italc, и мы даже уделили несколько недель его настройке и экспериментам. Но он оказался слишком глючен и примитивен, поэтому был благополучно забыт.
Первой же мыслью было настроить доступ через ssh по отпечатку. Это сократило бы задачу до одного цикла, но для применения «на коленке» этот способ оказался не совсем пригоден (хотя почему нет? ЕМНИП, отпечаток для пользователя также можно создать без рута). Но при доступной авторизации по паролю (кстати, большой ущерб безопасности для учебных классов, где логин-пароли одинаковы) меня заинтересовал вариант с автоматической авторизацией по паролю. Уделив час поиску, я нашёл несколько примеров для expect.
Решение через expect
Перед началом
Но, во первых, он должен быть установлен. В моём классе мы без труда сделали это, а вот в классе гимназии ВНЕЗАПНО оказалось, что и expect, и nmap, и некоторые другие интересные системные утилиты не только установлены, но и доступны ученику. Это очень помогло нам, когда в очередной раз «упал» прикрученный по NFS сетевой диск, и мы нашли способ распространения заданий через быстро найденный бухгалтерский компьютер с расшаренными дисками.
Во вторых, кроме самого expect, нам понадобится использовать 2 типа цикла: с предусловием и с параметром. Первый необходим для «зацикливания» процесса, чтобы можно было повесить выполнение скрипта фоном на всё занятие. Второй же необходим для перебора необходимых адресов, на которые мы будем заходить по ssh при помощи собственно expect.
Также необходимо помнить, что стандартно скрипт выпадает при возникновении первой же ошибки, например неответе компьютера клиента, и наверное стоит поискать способ обработки таких исключений.
Скрипт
Сообщаем, что для выполнения нам необходимо использовать нестандартный интерпретатор
Задаём паузу для ожидания ответа с клиента, имя пользователя и пароль (это скорее по инерции из имеющихся в сети примеров):
Это был простой скрипт автоубивания ненужных процессов для гимназии. В своём же кабинете я модифицировал скрипт и для автовыключения машин:
Заключение
Надеюсь, упоминание замечательного интерпретатора expect и пара живых примеров по работе с ним будут полезны сообществу и породят немало статей о более тонких его применениях.
Источник
Запуск команд или скрипта через SSH
Сегодня рассмотрим примеры для запуска команд или скрипта через SSH соединения. Научимся запускать наши команды/скрипты из одной рабочей станции Linux на другой удаленной Linux машине. Рассмотрим практические примеры использования мощного инструмента SSH в администрировании Linux.
Запуск команд через SSH
Если вы хотите удаленно запустить какую-либо команду на сервере через SSH, то нет ничего проще. Давайте рассмотрим пару примеров.
Узнайте аптайм удаленного сервера:
Узнать проходит ли пинг на удаленном сервере до google DNS:
Перезагрузить удаленную машину:
Запуск нескольких команд через SSH
В большинстве случаем недостаточно удаленно запустить только одну команду по SSH. Намного чаще необходимо отправить сразу несколько команд на удаленный сервер, например, для сбора информации и получить результат обратно.
Запустить несколько команд на удаленном хосте по SSH:
Практические примеры использования SSH
Узнайте аптайм и сколько свободного места на диске:
Сколько используется памяти и среднюю нагрузку:
Узнать версию ядра, количество ядер CPU и сколько всего RAM:
SSH: Запуск Bash Скрипта
Также бывает ситуация, когда на Linux сервере лежит какой-либо скрипт и его необходимо запустить по SSH на другом Linux сервере.
Основная идея заключается в том, чтобы подключиться на удаленный Linux сервер, дать скрипту выполнить свою работу и получить результат, при этом не копируя сам скрипт на удаленный сервер.
Эта задаче безусловно может быть выполнена и при этом довольно просто.
Что если вы хотите выполнить сценарий с аргументом.
Если требуются привилегии sudo, то команда примет вид:
- password — пароль для пользователя root на удаленной машине.
- script.sh — файл с вашим скриптом расположенный на станции с которой производите подключение.
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.
Источник
Скрипт подключения по ssh linux
В предыдущей статье я уже рассказал как с помощью несложного bash скрипта автоматизировать процесс telnet подключения к группе хостов c последующим запуском команд. Однако нашлось оборудование на котором разрешено подключение только по ssh. Давайте попробуем переделать наш скрипт под ssh и поможет нам в этом expect.
Expect — программная оболочка дающая возможность запрограммировать диалог с утилитами, которые в процессе использования запрашивают ввод информации у пользователя. В нашем случае такой утилитой будет выступать ssh клиент.
Bash script ssh с использованием expect
Краткая постановка задачи:
Есть три маршрутизатора cisco c ip-адресами 192.168.10.10, .11 и .12. Нужно подключить к ним по ssh и выполнить команду «show ver | include IOS».
Первым делом на надо установить expect.
Для ОС RedHat, CentOS, Fedora и т.п.
Для ОС Debian, Ubuntu, Mint и т.п.
Ну а теперь приведу текст самого скрипта.
Описание ssh скрипта
Полное описание скрипта делать не буду, так как уже описывал в предыдущей статье «Bash скрипт для автоматического telnet соединения и ввода команд», ну и плюс краткое описание я оставил в комментариях текста скрипта. Отличие этого скрипта — это использование expect. Вот его работу и разберем подробнее.
1. spawn — запуск утилиты (программы). В нашем случае мы запускаем ssh клиент, но можно также запускать к примеру ftp, telnet, scp и т.п.
2. expect — ожидание выводимых программой информации (данных). При первом подключение по протоколу ssh всегда запрашивается приглашение вида.
Данное приглашение просит ввести «yes» для продолжения соединения. Однако при повторной попытке подключения, данное сообщение выводиться уже не будет. Поэтому и получаем в скрипте конструкцию вида:
Таким образом, если есть в выводе утилиты ssh текст «(yes/no)» то отправляем согласие в виде «yes». Если нет, то переходим по таймауту дальше.
Время таймаута также задано в скрипте строкой «set timeout 1».
send — как вы уже поняли, это отправка входных данных программе. С помощью нее мы и отправляем пароль и запрос на вывод версии IOS «show ver | include IOS».
При отладки скрипта можно раскомментировать следующие строки:
При запуске скрипта, будет создан файл «debug.log» содержащий в себе отладочную информацию по работе expect-а.
Создать файл можно, используя команду touch имя_файла.
Дать максимум привилегий можно используя chmod 777 имя_файла.
Запустить bash-скрипт можно используя перед именем файла «./»
Скрипт отработает и создаст файл с названием ssh_conn.log, в котором и будет храниться вывод выполняемых на железяках команд.
Пример содержания файла ssh_conn.log
На этом все. Нам удалось создать bash-скрипта с применением в нем программной оболочки expect, который автоматизирует процесс подключения к нескольким удаленным хостам по протоколу ssh, выполняет ввод заданных нами команд и собирает результат их выполнения в файл. Комментируем, подписываемся ну и всем пока:)
1″ :pagination=»pagination» :callback=»loadData» :options=»paginationOptions»>
Источник
Как подключиться по SSH
SSH — это основной протокол для удаленного управления серверами на базе операционной системы Linux. Все действия при подключении к SSH выполняются в командной строке, но при достаточном уровне знаний и привилегий в системе там можно сделать практически все что угодно, в отличие от того же FTP где можно только передавать и редактировать файлы.
Если вы покупаете VPS сервер или продвинутый хостинг, обычно в письме вместе с другими данными авторизации есть данные доступа по SSH. В этой статье мы рассмотрим как подключиться по SSH к серверу из Linux или Windows.
Что такое SSH?
Поскольку эта статья рассчитана именно на новичков, то перед тем, как перейти дальше давайте подробнее разберемся что из себя представляет SSH. Исторически так сложилось что на большинстве серверов используется операционная система Linux, во многом этому посодействовала ее бесплатность. Графический интерфейс на серверах Linux не используется для экономии ресурсов, поэтому единственным способом администрирования сервера остается командная строка.
Но это не является недостатком, потому что в командной строке Linux можно сделать больше чем графическом интерфейсе. Протокол SSH позволяет вам выполнять команды в удаленной системе так, как будто вы это делаете в своей системе. Вам доступен буфер обмена, вы вводите команды и можете использовать их вывод. Недоступны разве что файлы из вашей файловой системы. Например, когда вы подключитесь к серверу по SSH из Ubuntu, то все будет выглядеть так, как будто вы открыли терминал в своей системе.
Как подключиться по SSH
Для подключения по SSH нам необходимо знать такие данные:
- ip адрес сервера, к которому мы собираемся подключится;
- порт, на котором ожидает подключения SSH сервер, по умолчанию используется 22, но в целях безопасности порт подключения ssh часто изменяют;
- имя и пароль пользователя на удаленном сервере.
Больше ничего не нужно, обычно эти данные присылают в письме вместе с описанием VPS. Теперь перейдем к практике.
1. Подключение через SSH в Linux
В Linux подключение по SSH выполняется с помощью утилиты ssh. Мы более подробно рассматривали работу с ней в статье как пользоваться ssh. Для подключения к удаленному компьютеру ее синтаксис будет выглядеть следующим образом:
$ ssh имя_пользователя @ айпи_адрес
Это самый простой вариант, если вам также нужно задать порт, используйте опцию -p:
$ ssh имя_пользователя @ айпи_адрес -p порт
Чтобы выполнить подключение по SSH Linux нажмите Ctrl+Alt+T для открытия терминала и наберите команду, заменив нужные значения:
Или, с нестандартным портом:
ssh sergiy@192.168.1.2 -p 2223
Если ip_адрес и порт правильные, то на следующем шаге программа попросит у вас ввести пароль:
Если пытаетесь подключится через SSH к этому серверу первый раз, то утилита также попросит подтвердить добавление нового устройства в свой список известных устройств, здесь нужно набрать yes и нажать Enter:
Теперь вы подключены, и все вводимые далее команды будут выполнены на удаленном сервере:
Если же произошла ошибка и IP адрес или порт введены неверно, то вы получите ошибку Connection Refused:
Просто убедитесь что порт введен верно. Если это ваш сервер, то, возможно на нем еще нужно разрешить подключение SSH в брандмауэре. В Ubuntu/Debian для этого на удаленном сервере выполните:
sudo ufw allow 22/tcp
А в CentOS/Fedora:
firewall-cmd —permanent —zone=public —add-port=22/tcp
Если вы используете другой порт для SSH, то замените 22 на свой порт. Для удобства подключения по SSH в дальнейшем можно настроить авторизацию по ключу ssh, чтобы не вводить каждый раз пароль.
Теперь вы знаете как подключиться по ssh linux и решить проблемы с подключением. А теперь перейдем к Windows.
2. Подключение через SSH в Windows
Раньше подключение по SSH из Windows выполнялось только с помощью сторонних утилит, например PuTTY. Но в Windows 10 был добавлен встроенный OpenSSH клиент и работает он точно так же, как и в Linux. По умолчанию этот компонент не активирован. Для его установки откройте Параметры -> Приложения:
Затем выберите Управление дополнительными компонентами:
Здесь нажмите добавить новый компонент и в открывлемся меню выберите OpenSSH Client и нажмите Устанвоить:
Дальше вернитесь назад и дождитесь завершения установки. После того, как SSH клиент будет установлен нужно обязательно перезагрузить компьютер.
После перезагрузки нажмите Win+R чтобы открыть окно запуска команд и наберите в нем cmd:
Далее нажмите Enter. Перед вами откроется командная строка Windows. Здесь можно использовать утилиту ssh. Синтаксис у нее абсолютно такой же, как и для Linux:
ssh имя_пользователя @ айпи_адрес -p порт
Например, такой командой можно подключится по SSH к Raspberry Pi, который находится в вашей локальной сети по адресу 192.168.1.5:
Утилита предложит добавить устройство в список известных:
Затем предложит ввести пароль:
Все следующие команды будут выполняться уже на Raspberry Pi или другой удаленной машине, к которой вы подключились.
Теперь подключиться к серверу по ssh из этой операционной системы также просто как и из Linux.
Выводы
В этой статье мы рассмотрели как выполняется подключение к серверу по SSH из Linux или Windows. Как видите, это очень просто. А дальше, для работы с удаленным сервером вам понадобятся команды терминала Linux.
Источник