Ich habe mehrere Computer, auf die ich regelmäßig ssh, nur sudo su
um den Rest meiner Sitzung damit zu verbringen, als Spezialbenutzer angemeldet zu sein. Der allgemeine Workflow lautet:
mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Ich möchte dies zu einem Einzeiler zusammenfassen, den ich als Alias verwenden kann, sodass ich einfach einen Alias für jede Maschine einrichten und mit einem einzigen Befehl dahin gelangen kann, wo ich sein muss, ohne die sudo su - specialuser
Boilerplate eingeben zu müssen. Ich könnte vielleicht einrichten , me@othermachine
um sudo su
auf Login, aber ich mag die Flexibilität halten , wie zu bedienen , me
wenn es nötig ist .
( Hinweis: Ich habe keine Kontrolle über othermachine
oder die Art und Weise, wie es eingerichtet ist. Dies ist ein etablierter Workflow, auf den ich bei meiner Einstellung gestoßen bin.)
Mein erster Gedanke war gerecht
ssh me@othermachine "sudo su - specialuser"
und diese Art von Arbeiten, aber es gibt mir keine Aufforderung, ^C
tötet es und meldet mich ab, und ich gehe davon aus, dass verschiedene andere Dinge wahrscheinlich auch falsch sind.
Nachdem ich den Befehl Run Remote ssh mit Full Login Shell gelesen hatte, versuchte ich ein paar exotischere Dinge wie
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
und
ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'
- von denen ich nicht erwartet hatte, dass sie funktionieren, und sie auch nicht, aber ich dachte, ich sollte sie der Vollständigkeit halber ausprobieren (und um Doppelarbeit zu vermeiden); sie erzeugte die gleichen prompt losen Schale (die zweiten mit einer zusätzlichen Bonus Aufforderung losen Schal für me
nachdem exit
von dem für -Ing specialuser
). Und ich habe es versucht
ssh me@othermachine "sudo su - specialuser -c bash -l"
aber es hat mich gerade erwischt
sudo: no tty present and no askpass program specified
Bessere Ideen?
~/.profile
nach einer kurzen Verzögerung?sudo
schlagen sollte^C
? Wenn ich mir nichts Besseres einfallen lassen kann, könnte ich das versuchen.su me
ausspecialuser
. Oder in.profile
oder.bashrc
, wenn Sie demsudo
mit nicht folgenexit
,exit
bringt Sie Ihr erster zurückme
, mit einem zweiten, um die Sitzung zu beenden. Oder verwenden Sie sogar eine Flag-Datei, der Folgendessudo
vorangestellt[ -f ~/.keep.me ] && del ~/.keep.me
und gefolgt wird[ \! -f ~/.keep.me ] && exit
: Sie benötigen dann nur ein Skript oder einen Alias für einen Befehlme
als:>~/.keep.me; exit
. Jetztexit
beenden Sie Ihre Sitzung undme
kehren zu Ihrer Anmeldesitzung zurück./bin/bash
undbash
aus Sicherheitsgründen nicht einfach (um Trojaner zu vermeiden ). Besonders wenn es einesudo
vorher gibt ...Antworten:
Diese Zeile sollte für Sie funktionieren
Diese Lösung gibt mir je nach
-t
Schalter eine Aufforderung oder nichtNotizen von
man ssh
quelle
RequestTTY force
(was gleich ist-t
) undRemoteCommand sudo su - specialuser
! Beachten Sie jedoch, dass andere Programme, die SSH verwenden (wie scp, rsync usw.), für diesen Host nicht mehr ordnungsgemäß funktionieren.