Как выполнить команду, требующую sudo через SSH

Как выполнить команду, требующую sudo через SSH

7 января 2025 г.

Secure Shell включает в себя множество трюков, многие из которых могут сделать жизнь вашего администратора экспоненциально проще. Один из таких трюков — возможность запускать команды на удаленных серверах без входа в систему.

Конечно, вы можете потратить время на вход на сервер, выполнить команду и выйти, но почему бы просто не сделать все это одним махом? Это не только удобно, это довольно просто.

СМ.: Основные команды, которые необходимо знать администраторам Linux (TechRepublic Premium)

Что вам нужно

Единственное, что вам для этого нужно, это еще две машины Linux, включая запущенный и работающий openssh-server (и принимающий соединения). Вы можете сделать это из стандартных репозиториев, если у вас не установлен демон SSH. Например, на платформе Ubuntu Server команда для установки демона SSH выглядит так:

sudo apt-get install openssh-server -y

После установки вам нужно будет включить сервер с помощью команд:

sudo systemctl start sshd sudo systemctl enable sshd

Обратите внимание, что в системах Ubuntu служба для сервера OpenSSH называется ssh, а не sshd. Поэтому команды для запуска и включения сервера SSH будут следующими:

sudo systemctl start ssh sudo systemctl enable ssh

Теперь, когда у вас запущен демон SSH на удаленных серверах, вы можете отправлять им команды. Давайте узнаем, как это сделать.

СМ.: Как просмотреть ключи SSH в Linux, macOS и Windows (TechRepublic)

Выполнение базовой команды

Давайте получим список файлов в удаленном каталоге /etc. Для этого команда:

ssh ПОЛЬЗОВАТЕЛЬ@IP_СЕРВЕРА "ls /etc"

Где USER — это имя удаленного пользователя, а SERVER_IP — это IP-адрес удаленного сервера. После успешного ввода пароля удаленного пользователя вы получите список каталога /etc/ на удаленном сервере.

Проще простого.

СМ.: Как быстро предоставить пользователям привилегии sudo в Linux (TechRepublic)

Выполнение команды, требующей sudo

Но что, если вам нужно запустить команду, которая требует привилегий sudo на удаленном сервере? Если вы это сделаете, вы увидите ошибку tty.

Как это обойти? К счастью, есть небольшой переключатель, который можно добавить к команде. Этот переключатель -t. Что делает -t? Он принудительно выделяет псевдотерминал, поэтому ssh не имеет ни малейшего представления о том, что у него нет локального терминала для использования.

Итак, чтобы запустить удаленную команду через ssh, требующую привилегий sudo, команда ssh выглядит так:

ssh -t ПОЛЬЗОВАТЕЛЬ@IP_СЕРВЕРА "sudo КОМАНДА"

Например, вы хотите, чтобы пользователь jack обновил удаленный сервер по адресу 192.168.1.201. Эта команда:

ssh -t jack@192.168.1.201 "sudo apt-get upgrade -y"

Сначала вам будет предложено ввести пароль пользователя для SSH-подключения, а затем последует повторный запрос пароля пользователя для привилегий sudo.

Запрос пароля пользователя для привилегий sudo. Изображение: Джек Уоллен

Команда будет запущена так, как будто она была выполнена на локальной машине (только она запущена на удаленной машине). Когда команда завершится, вы вернетесь в локальную командную строку, готовые продолжить работу.

Вот и все, что нужно знать о запуске команд, требующих привилегий sudo на удаленной машине через SSH.

Первоначально статья была опубликована в июле 2019 года. Она была обновлена ​​Энтони Пейтоном в январе 2025 года.

Подпишитесь на рассылку Developer Insider От самых популярных языков программирования до комментариев по ОС Linux — получайте новости и советы от разработчиков и разработчиков с открытым исходным кодом, которые вам нужно знать. Доставка по вторникам и четвергам Адрес электронной почты Подписываясь на нашу рассылку, вы соглашаетесь с нашими Условиями использования и Политикой конфиденциальности. Вы можете отписаться в любое время. Подписаться
Подпишитесь на рассылку Developer Insider От самых популярных языков программирования до комментариев по ОС Linux — получайте новости и советы от разработчиков и разработчиков с открытым исходным кодом, которые вам нужно знать. Доставка по вторникам и четвергам Адрес электронной почты Подписываясь на нашу рассылку, вы соглашаетесь с нашими Условиями использования и Политикой конфиденциальности. Вы можете отписаться в любое время. Подписаться

Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE