- 🍟 Как запустить команду, которая требует sudo через SSH
- Что вам нужно
- Выполнение основных команд
- Запуск команды, которая требует sudo
- no tty presents and askpass program specified
- 🐧 Как выполнить команды на удаленной системе Linux через SSH
- 1) Как выполнить команду на удаленной системе Linux через SSH
- 2) Как запустить несколько команд на удаленной системе Linux через SSH
- 3) Как запустить команду с привилегиями sudo на удаленной системе Linux через SSH
- 4) Как запустить служебную service с привилегией sudo на удаленной системе Linux через SSH
- 5) Как выполнить команду на удаленной системе Linux через SSH с нестандартным портом
- 6) Как сохранить вывод из удаленной системы в локальную через ssh
- linux-notes.org
- Не доверяйте SUDO, она может вас подвести
- Пользователь ch14-1
- Пользователь ch14-2
- Пользователь ch14-3
- Пользователь ch14-4
- Пользователь ch14-5
- Пользователь ch14-6
- Пользователь ch14-7
- Пользователь ch14-8
- Пользователь ch14-9
- Пользователь ch14-10
- Пользователь ch14-11
- Пользователь ch14-12
- Пользователь ch14-13
- Пользователь ch14-14
🍟 Как запустить команду, которая требует sudo через SSH
С помощью SSH вы можете запускать команды на удаленных компьютерах, даже если команда требует привилегий sudo.
Secure Shell включает в себя множество приемов, многие из которых могут значительно облегчить жизнь вашему администратору.
Одним из таких приемов является возможность запуска команд на удаленных серверах без входа в систему.
Конечно, вы можете потратить время, чтобы войти на сервер, выполнить команду и выйти из системы, но почему бы просто не сделать все это одним махом?
Это не только удобно, но и довольно просто.
Что вам нужно
Единственное, что вам для этого нужно, – это еще две машины Linux, каждая из которых включает в себя openssh-server и работает (и принимает соединения).
Если у вас не установлен демон SSH, вы можете сделать это из стандартных репозиториев.
Например, на платформе Ubuntu Server команда для установки демона SSH:
После установки вы должны включить сервер с помощью команд:
Теперь, когда на удаленных серверах запущен демон SSH, вы можете отправлять ему команды.
Давайте узнаем, как.
Выполнение основных команд
Давайте получим список файлов в удаленном каталоге /etc.
Для этого запустите:
Где USER – имя удаленного пользователя, а SERVER_IP – IP-адрес удаленного сервера.
После успешного ввода пароля удаленного пользователя вы получите список каталога /etc/ на удаленном сервере.
Запуск команды, которая требует sudo
Но что, если вам нужно запустить команду, требующую привилегий sudo на удаленном сервере?
Если вы сделаете также, вы увидите ошибку tty:
no tty presents and askpass program specified
Как справится с этим?
К счастью, есть небольшой переключатель, который вы можете добавить в команду.
Указанный переключатель -t.
Он вызывает псевдо-терминальное распределение, поэтому ssh не имеет представления, что у него нет локального терминала для использования.
Итак, для запуска удаленной команды через ssh, требующей привилегий sudo, команда ssh выглядит следующим образом:
Например, вы хотите, чтобы пользовать джек обновил удаленный сервер по адресу 192.168.1.201.
Это будет следующая команда:
Сначала вас попросят ввести пароль пользователя для соединения SSH, а затем второй запрос пароля пользователя для привилегий sudo :
Команда будет работать так, как если бы она была выполнена на локальном компьютере (только на удаленном компьютере).
Когда команда завершится, вы вернетесь к локальной подсказке, готовой продолжать работу.
И это все, что нужно для запуска команд, которые требуют привилегий sudo на удаленной машине через SSH.
Источник
🐧 Как выполнить команды на удаленной системе Linux через SSH
Возможно, нам потребуется выполнить некоторые команды на удаленной машине.
Для этого войдите на удаленную систему и выполните свои действия, если это происходит время от времени.
Но если это происходит часто, каждый раз, когда вы делаете это может вас сильно раздражать
Если так, то как лучше выбраться из этой ситуации?
Да, вы можете сделать это из локальной системы вместо входа в удаленную систему.
Это сэкономит вам много времени.
Как это происходит?
SSH позволяет вам запускать команды на удаленном компьютере без входа в систему.
Общий синтаксис следующий:
1) Как выполнить команду на удаленной системе Linux через SSH
В следующем примере пользователи могут запускать команду df через ssh на удаленном компьютере с Linux.
2) Как запустить несколько команд на удаленной системе Linux через SSH
В следующем примере пользователи могут запускать несколько команд одновременно через ssh на удаленной системе Linux.
Он одновременно запускает команды uptime и free на удаленной системе Linux.
3) Как запустить команду с привилегиями sudo на удаленной системе Linux через SSH
В следующем примере пользователи могут запускать команду fdisk с привилегией sudo на удаленной системе Linux через ssh.
Обычные пользователи не могут выполнять команды, доступные в системном бинарном каталоге (/usr/sbin/).
Пользователи должны иметь права root для запуска этих бинарников.
Таким образом, чтобы запустить команду fdisk в системе Linux, вам нужны права root.
Команда which возвращает полный путь к исполняемому файлу данной команды.
4) Как запустить служебную service с привилегией sudo на удаленной системе Linux через SSH
В следующем примере пользователи могут запускать команду service с привилегией sudo на удаленной системе Linux через ssh.
5) Как выполнить команду на удаленной системе Linux через SSH с нестандартным портом
В следующем примере пользователи могут запускать команду hostnamectl через ssh на удаленной машине Linux с нестандартным портом.
6) Как сохранить вывод из удаленной системы в локальную через ssh
В следующем примере пользователи могут удаленно выполнять команду top в системе Linux через ssh и сохранять выходные данные в локальной системе.
Кроме того, вы можете использовать следующий формат для запуска нескольких команд в удаленной системе.
Источник
linux-notes.org
Очень удобно запускать команды прям через подключение SSH. В данной статье я приведу наглядные примеры.
Запуск команд выглядит следующим образом:
- your_my_SSH_user — Это имя пользователя для подключения к серверу через SSH.
- your_server_or_IP — Это название сервера или его IP для подключения к серверу через SSH.
- some_command — Некоторая(ые) команды.
Узнать uptime сервера, можно:
Показать сколько место имеется на разделах:
Вы так же, можете запускать sudo команды:
Метод 1.
Синтаксис выглядит следующим образом:
Для примера, нужно узнать время (дату) на сервере и потом выполнить ребут ОС:
Так же, можно использовать двойные кавычки.
Метод 2.
Для примера, смотрим состояние памяти ( сколько свободно, занято) и проверяем Load Average (LA):
Метод 3.
Предположим, нужно узнать версию ядра Unix/Linux, информацию о процессоре(ах) и количество RAM в системе:
Метод 4.
Запускаем скрипт который находится локально, на удаленном сервере:
Привер, имеется на моем маке ‘this_script_is_local.sh’ скрипт и я хотел бы запустить его на удаленной машине. Можно это сделать так:
Метод 5.
Используем пайп для перенаправления. Пример исправления репликации (Master-Slave):
PS: Вот полезные статье по теме репликации:
При необходимости, можно скопировать содержимое удаленного файла (команды) в буфер обмена:
А так можно скопировать вывод команды:
Похожий прием можно использовать для сравнения двух файлов:
Более сложные команды, для примера — нужно из списка ИП выбрать случайный. К этому ИПшнику выполнить подключение и «убить» рандомный процесс. Мн потребовалось около 2 часов на данную реализацию:
Вот и все. Статья «Запустить команды через SSH в Unix/Linux» завершена.
Источник
Не доверяйте SUDO, она может вас подвести
Всем доброго времени суток, в этой статье постараюсь описать некоторые способы обхода ограничений на исполнение команд в ОС Linux, советы по использованию которых можно часто встретить на различных форумах. Демонстрация будет проведена на примере задания Restricted shells с сайта Root-Me. Итак, начнём.
Пользователь ch14-1
После подключения по SSH мы попадаем на первого пользователя, и видим подсказку: «Всегда проверять sudo -l». Но для начала нужно обойти первую преграду, это rbash, который часто рекомендуют использовать для ограничения действий пользователя в командной оболочке. И действительно, с виду, он является хорошим решением, но не всегда!
Нас лишили возможности использовать ls, но мы можем отобразить содержимое любой директории используя echo:
Обычно, список бинарников разрешённых к запуску в rbash находится в так называемой домашней директории. В данном случае нам доступен vim, используя который мы можем выйти в нормальную оболочку. Запускаем vim и вводим команды:
Sudo разрешает нам запустить python, а учитывая его безграничные возможности это не совсем безопасно, и вот почему:
Вводим следующие команды:
Пользователь ch14-2
И попадаем на следующего пользователя, которому доступен архиватор tar.
Казалось бы, что в этом опасного? Однако tar, как и многие другие архиваторы, позволяет упаковывать и распаковывать файл сохраняя права доступа к нему. Создадим файл shell.c следующего содержания:
Компилируем и добавляем SUID бит:
Теперь распаковываем с сохранением прав используя sudo:
В результате, после разархивирования, файл shell обретает нового владельца. В этом можно убедиться выполнив ls -ahl:
-rwsrwsrwx 1 app-script-ch14-3 app-script-ch14 7.2K Feb 14 22:39 shell
После запуска попадаем на следующий уровень:
Пользователь ch14-3
Снова проверяем sudo:
На этот раз уже лучше, по умолчанию, zip только упаковывает файлы, для распаковки нужен unzip, который мы запустить не можем, или можем?
Заглянув в man по zip‘у, находим там интересный параметр:
-TT cmd —unzip-command cmd
Use command cmd instead of ‘unzip -tqq’ to test an archive when the -T option is used. On Unix, to use a copy of unzip in the current directory instead of the standard system unzip, could use:
In cmd, <> is replaced by the name of the temporary archive, otherwise the name of the archive is appended to the end of the command. The return code is checked for success (0 on Unix)
Вот и ответ. Запускаем архивацию с последующим тестированием архива, а в качестве команды для проверки, указываем unzip, который распакует файл в текущую директорию, естественно с сохранением прав доступа:
Пользователь ch14-4
Смотрим, что ему доступно:
Ну тут всё просто, достаточно выполнить команду, описание которой можно легко найти в сети:
Пользователь ch14-5
Новый пользователь и новые ограничения:
GDB довольно мощный отладчик, и способов вызвать bash у него гораздо больше:
Первый это через встроенный Python:
Либо аналогично, как это делали с vim:
Пользователь ch14-6
Если вы думаете: «Что можно сделать через такой простой редактор как pico», то вероятно вы не знаете про его проверку орфографии, о которой кстати написано в man‘е. А сказано там следующее, что в качестве утилиты для проверки орфографии, мы можем указать всё что угодно. У нас уже есть отличный бинарник для запуска оболочки, нужно только придать ему соответствующие права. Для этого создадим файл spellbash.sh со следующим содержимым:
И запускаем pico, передав ему в качестве программы для проверки орфографии наш скрипт:
После успешной проверки орфографии и закрытия редактора, наш скрипт готов к запуску:
Пользователь ch14-7
-S program — Name of program to use for the encrypted connection. The program must understand ssh(1) options.
Ок, действия аналогичны прошлому уровню:
Пользователь ch14-8
!command Execute the shell command with $SHELL.
Прямое исполнение команд оболочки. То что нам нужно, открываем man для любой команды, и вводим !/bin/bash:
Пользователь ch14-9
Так как прав выполнить подключение к внешнему серверу у нас нет, то нужен способ выполнить команду, ещё до установки соединения. И такая возможность есть, воспользуемся советом, описанным тут:
Получаем сообщение о том, что соединение сброшено, но это нем и не важно, ведь:
Пользователь ch14-10
Git так же предоставляет множество способов выполнить стороннюю команду, мы воспользуемся наиболее простым из них, который мы использовали с man:
Далее вводим !/bin/bash и попадаем на следующего пользователя:
Пользователь ch14-11
Вот мы и дошли до ещё одного распространённого совета, вместо vim использовать его ограниченную версию rvim и вот почему: Попробовав тот же способ, что использовался в самом начале для vim, получаем ошибку:
Но и тут есть лазейки… Просматривая список доступных команд, можно наткнуться на команды :python и :lua. Ограниченный от прямого исполнения команд rvim оказался не таким уж и безопасным.
Пользователь ch14-12
script запускает новую сессию, и полностью логирует всё в указанный файл, так что просто запускаем:
Пользователь ch14-13
Тут тоже ничего сложного, поэтому просто запускаем и снова попадаем в «начало»:
Пользователь ch14-14
На этот раз авторы учли ошибки, и убрали vim:
При выполнении команды, как можно догадаться появляется анимация локомотива и надпись
Но содержимое файла .passwd, требуемое по условию задания, мы так и не получили. Значит это ещё не конец.
Посмотрим список команд, которые доступны:
Не густо, однако есть несколько способов получить содержимое файла .passwd, здесь будет только 1 из них, остальные оставлю вам на самостоятельный поиск. И так, просматривая help по каждой доступной команде, находим одну из них довольно интересной:
После недолгих поисков в сети примеров её использования, находим статью, которая как раз описывает способ чтения произвольного файла в переменную окружения, используя эту команду.
Воспользовавшись советом, выполняем:
И получаем искомый пароль.
Теперь, добавляя возможность запуска какой-либо программы в файл sudoers, не поленитесь и ознакомьтесь с полным её описанием, ведь возможно именно она станет основной дырой в безопасности.
Источник