Une commande peut-elle être exécutée sur ssh avec un utilisateur nologin?

13

Si un utilisateur possède, loginShell=/sbin/nologinil est toujours possible de

ssh user@machine [command]

en supposant que l'utilisateur a des clés ssh appropriées dans son répertoire personnel qui peuvent être utilisées pour s'authentifier?

Mon objectif est de garder l'utilisateur en tant que nologin, mais toujours capable d'exécuter des commandes sur quelques autres machines sur le réseau (similaire à son utilisation via 'sudo -u'), et je me demande si c'est un cours raisonnable.

Centimane
la source
1
Ça devrait marcher. Le commandest exécuté à la place du shell de connexion.
orion
1
Cela va à l'encontre de l'objectif de configuration en /sbin/nologintant que shell. Si votre souci est la sécurité du compte, il suffit de désactiver l'authentification par mot de passe et d'utiliser les clés ssh.
Creek
@Creek il y a une différence entre les shells de connexion et les autres instances de shell. Donc, ce qu'il demande ne va pas nécessairement à l'encontre du but de / sbin / nologin. Il se peut qu'il veuille effectuer un travail en dehors du contexte d'un shell de connexion.
Michael Martinez
7
@orion Wrong. La commande est exécutée par le shell de connexion.
Gilles 'SO- arrête d'être méchant'
@MichaelMartinez dans le contexte de son exemple, si le shell de l'utilisateur est /sbin/nologinalors l'utilisateur ne pourra pas se connecter ou exécuter des commandes sur la machine. cronjobs peut être exécuté en tant qu'utilisateur et sftppeut être configuré pour ouvrir des sessions, mais l'ouverture d'un shell via ssh ne se produira pas
Creek

Réponses:

17

La définition /sbin/nologindu shell de l'utilisateur (ou /bin/falseou /bin/true, qui sont presque équivalents ) interdit à l'utilisateur de se connecter pour exécuter quelque commande que ce soit. SSH invoque toujours le shell de connexion de l'utilisateur pour exécuter des commandes, vous devez donc définir le shell de connexion sur celui qui est capable d'exécuter certaines commandes.

Il existe plusieurs shells restreints qui permettent aux utilisateurs d'exécuter seulement quelques commandes. Par exemple rssh et scponly sont tous deux ces coquilles qui permettent à l'utilisateur d'exécuter quelques commandes prédéfinies ( par exemple scp, sftp-server, rsync, ...). Voir aussi Restreindre l'accès utilisateur sous linux et Avez-vous besoin d'un shell pour SCP?

Gilles 'SO- arrête d'être méchant'
la source
Merci, j'ai fini par démissionner pour donner au compte un shell de connexion afin qu'il puisse exécuter les commandes à distance. La meilleure solution aurait probablement été ssh en tant qu'utilisateur actuel et appeler sudo -u pour la commande ssh, mais ce n'est pas entièrement applicable dans mon cas.
Centimane
1

Il semble que la réponse soit non.

ssh user@machine [command]

avec les clés ssh en place ne donne que:

This account is currently not available

plutôt que l'exécution de la commande, il me semble que je vais devoir lui donner accès à bash.

Centimane
la source
-4

Je ne sais pas si cela est possible (devrait être facile à tester cependant) mais il existe une fonctionnalité qui répond probablement à votre question d'une certaine manière et en tout cas résout votre problème.

Vous pouvez ajouter une commande à la ligne de touche dans authorized_keys. Dans ce cas, cette commande est exécutée, rien d'autre. Je suppose que cela fonctionne /sbin/nologincar le shell doit être ignoré de toute façon.

Mais vous auriez besoin d'une clé différente pour chaque commande que vous autorisez.

Hauke ​​Laging
la source
Malheureusement, la solution dont j'ai besoin devrait être plus flexible que cela
Centimane
si c'est facile à tester, alors vous devriez le tester avant d'écrire une réponse.
Michael Martinez
@MichaelMartinez C'est la tâche du questionneur de faire des tests faciles avant de demander. Il n'est pas difficile de remarquer qu'il n'a pas répondu à la question mais a fait une proposition pour le problème qui a causé la question. Ce qui convient parfaitement comme réponse. Downvoting this is just stupid. Auriez-vous critiqué la réponse sans le premier paragraphe? Exactement.
Hauke ​​Laging
3
La commande in authorized_keysest exécutée par le shell de connexion, donc non, cela ne fonctionne pas (non sans configuration supplémentaire non triviale). (Comment le fait de voter contre une mauvaise réponse est-il "stupide"? S'il vous plaît, respectez les autres .)
Gilles 'SO- arrête d'être méchant'