J'ai plusieurs machines dans lesquelles je ssh régulièrement uniquement dans le but d'utiliser sudo su
pour passer le reste de ma session connecté en tant qu'utilisateur spécial. Le workflow général est le suivant:
mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Je voudrais résumer cela en une seule ligne que je peux alias, donc je peux simplement configurer un alias pour chaque machine et arriver là où je dois être dans une seule commande, sans avoir à taper le passe- sudo su - specialuser
partout. Je pourrais peut-être configurer me@othermachine
à la sudo su
connexion, mais je voudrais garder la flexibilité de fonctionner comme me
si j'en avais besoin.
( Remarque: je n'ai aucun contrôle sur othermachine
la façon dont il est configuré; c'est un flux de travail établi sur lequel je suis entré lors de mon embauche.)
Ma première pensée était juste
ssh me@othermachine "sudo su - specialuser"
et ce genre de travaux, mais cela ne m'invite pas, le ^C
tue et me déconnecte, et je suppose que diverses autres choses sont probablement mauvaises aussi.
Après avoir lu la commande Run Remote ssh avec Full Login Shell, j'ai essayé quelques autres choses exotiques comme
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
et
ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'
- ni l'un ni l'autre dont je m'attendais à travailler, et ils ne l'ont pas fait, mais j'ai pensé que je devrais les essayer pour être complet (et pour éviter les doublons) ils ont produit le même shell sans invite (le second avec un bonus sans invite supplémentaire pour l' me
after exit
-ing de celui pour specialuser
). Et j'ai essayé
ssh me@othermachine "sudo su - specialuser -c bash -l"
mais ça m'a juste
sudo: no tty present and no askpass program specified
De meilleures idées?
~/.profile
après un court délai?sudo
je devrais frapper^C
? Si je ne peux rien trouver de mieux, je pourrais essayer.su me
partirspecialuser
. Ou dans.profile
ou.bashrc
, si vous ne suivez pas lesudo
avecexit
, votre premierexit
vous ramènera àme
, avec un second pour terminer la session. Ou même utiliser un fichier indicateur, doncsudo
est précédé[ -f ~/.keep.me ] && del ~/.keep.me
et suivi de[ \! -f ~/.keep.me ] && exit
: vous n'avez alors besoin que d'un script ou d'un alias pour une commandeme
as:>~/.keep.me; exit
. Maintenant ,exit
mettra fin à votre session etme
sera revenir à votre session de connexion./bin/bash
et pas simplebash
pour des raisons de sécurité (pour éviter les chevaux de Troie ). Surtout s'il y a unsudo
avant ...Réponses:
Cette ligne devrait fonctionner pour vous
Cette solution me donne une invite ou non en fonction du
-t
commutateurNotes de
man ssh
la source
RequestTTY force
(ce qui équivaut à-t
) etRemoteCommand sudo su - specialuser
! Cependant, sachez que d'autres programmes utilisant SSH (comme scp, rsync, etc.) ne fonctionneront plus correctement pour cet hôte.