exécuter su -c sur ssh

10

J'essaie de vérifier la version BIOS d'un serveur via SSH, une commande qui nécessite des privilèges root:

ssh remote-server su -c dmidecode

mais cela échoue bien sûr avec l'erreur:

standard doit être un tty

Comment faire pour que ça marche? Je ne peux pas utiliser sudo, et lorsque j'essaye de me connecter en tant que root @ remote-server, il n'acceptera pas le mot de passe que j'utilise pour la commande 'su'. J'utilise RedHat Enterprise Linux 4.

Aaron
la source
Je suggérerais également de chercher à utiliser sudo au lieu de "su -c"
wfaulk
1
comme je l'ai spécifié "Je ne peux pas utiliser sudo"
aaron
J'adorerais qu'il y ait eu plus d'informations sur les raisons pour lesquelles "je ne peux pas utiliser sudo" était le cas.
dannysauer
@dannysauer Tous les systèmes d'exploitation ne l'ont pas. J'essaie ici de résoudre le même problème, sauf que je ne suis pas sur RedHat comme OP. Je suis sur une variante Unix sans sudo. Je suis curieux de savoir pourquoi OP ne peut pas l'utiliser sur RedHat, mais je suis quand même reconnaissant que la question ait été posée.
Loduwijk
sudo s'appuie sur toutes les variantes UNIX que je connais, mais je conviens qu'il n'est pas installé (ou configuré) sur toutes. J'étais vraiment plus curieux de savoir pourquoi il n'était pas configuré là-bas (je pense - cela fait quelques années). : D
dannysauer

Réponses:

13

Utilisez -tpour forcer ssh à allouer un tty:

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

Vous pouvez également envisager d'autoriser directement root à ssh. Si vous utilisez l'authentification par clé publique, cela peut être plus sûr car vous ne passerez pas de mot de passe. Si vous décidez de le faire, envisagez de bloquer les connexions root depuis n'importe où, à l'exception de vos adresses IP de confiance, en mettant les éléments suivants dans /etc/security/access.conf:

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

et assurez-vous qu'il UsePAMn'est pas désactivé danssshd_config

géocar
la source
2
Une raison pour laquelle vous avez inclus deux -ts dans votre exemple?
wfaulk
2
Selon la page de manuel, plusieurs options -t "forcent l'allocation de tty, même si ssh n'a pas de tty local"
Heath
Cela ne fonctionne pas pour moi sur Fedora. Il permet au script de me demander mon mot de passe, mais mon mot de passe s'affiche en texte brut, et lorsque j'appuie sur Entrée, il se bloque simplement.
Cerin
@Chris, c'est un problème différent. Essayez de poser une nouvelle question.
géocar
@Heath merci pour le commentaire sur le double -t, qui fonctionne pour moi sur Centos
Paul Sheldrake
0

Vous ne pouvez pas simplement vous connecter au serveur distant en tant qu'utilisateur standard, puis utiliser sudo ?

Vous pouvez également essayer de citer la commande à exécuter par ssh, comme dans

ssh remote-server 'su -c dmidecode'

ou

ssh remote-server "su -c dmidecode"
Massimo
la source
3
-1 parce que citer la commande ne résoudra pas son manque de terminal. +1 pour avoir suggéré sudo. C'est un lavage.
wfaulk
comme je l'ai spécifié "je ne peux pas utiliser sudo"
aaron