выполнить su -c над ssh

10

Я пытаюсь проверить версию BIOS сервера через SSH, команда, которая требует привилегий root:

ssh remote-server su -c dmidecode

но это конечно терпит неудачу с ошибкой:

стандарт должен быть tty

Как мне сделать эту работу? Я не могу использовать sudo, и когда я пытаюсь войти в систему как root @ remote-server, он не принимает пароль, который я использую для команды 'su'. Я использую RedHat Enterprise Linux 4.

Аарон
источник
Я бы также предложил использовать sudo вместо su -c
wfaulk
1
как я указал "я не могу использовать sudo"
Аарон
Я бы хотел, чтобы было больше информации о том, почему «я не могу использовать sudo».
dannysauer
@dannysauer Не во всех ОС есть. Я здесь пытаюсь решить ту же проблему, за исключением того, что я не на RedHat, как OP. Я на Unix-варианте без sudo. Мне интересно, почему OP не может использовать его в RedHat, но я все равно благодарен, что вопрос был задан.
Лодувийк
В sudo используются все варианты UNIX, с которыми я знаком, но я согласен, что он не установлен (или не настроен) на всех них. Мне было действительно любопытно, почему это не было настроено там (я думаю - это было несколько лет). : D
dannysauer

Ответы:

13

Используйте, -tчтобы заставить ssh выделить tty:

ssh -t -t remote-user su -c dmidecode

Вы также можете разрешить прямой доступ root к ssh. Если вы используете аутентификацию с открытым ключом, это может быть более безопасно, поскольку вы не будете передавать пароль. Если вы решите сделать это, рассмотрите возможность блокировки корневых входов из любой точки, кроме доверенных IP-адресов, добавив следующее /etc/security/access.conf:

+ : root : 10.20.30.40
- : root : ALL EXCEPT LOCAL

и убедитесь, что UsePAMне отключен вsshd_config

geocar
источник
2
По какой причине вы включили два -ts в свой пример?
wfaulk
2
Согласно man-странице, несколько опций -t «принудительно распределяют tty, даже если у ssh нет локального tty»
Heath
Это не работает для меня на Fedora. Он позволяет сценарию запрашивать у меня пароль, но мой пароль отображается в виде открытого текста, а когда я нажимаю клавишу ввода, он просто зависает.
Серин
@ Крис, это другая проблема. Попробуйте задать новый вопрос.
геокар
@Heath, спасибо за комментарий о double -t, который работает для меня на Centos
Пол Шелдрейк
0

Разве вы не можете просто войти на удаленный сервер как обычный пользователь, а затем использовать sudo ?

Вы также можете попробовать процитировать команду, которая будет выполнена ssh, как в

ssh remote-server 'su -c dmidecode'

или

ssh remote-server "su -c dmidecode"
Massimo
источник
3
-1, потому что цитирование команды не решит его отсутствие терминала. +1 за предложение sudo. Это мытье.
wfaulk
как я указал "я не могу использовать sudo"
Аарон