ssh + sudo + su in die Login-Shell

11

Ich habe mehrere Computer, auf die ich regelmäßig ssh, nur sudo suum 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 - specialuserBoilerplate eingeben zu müssen. Ich könnte vielleicht einrichten , me@othermachineum sudo suauf Login, aber ich mag die Flexibilität halten , wie zu bedienen , mewenn es nötig ist .

( Hinweis: Ich habe keine Kontrolle über othermachineoder 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, ^Ctö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 menachdem exitvon 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?

David Moles
quelle
Was ist mit dem Hinzufügen des Befehls sudo ~/.profilenach einer kurzen Verzögerung?
Alex
Die Idee ist, dass ich in dem seltsamen Fall, den ich nicht will, sudoschlagen sollte ^C? Wenn ich mir nichts Besseres einfallen lassen kann, könnte ich das versuchen.
David Moles
1
Sie könnten su meaus specialuser. Oder in .profileoder .bashrc, wenn Sie dem sudomit nicht folgen exit, exitbringt Sie Ihr erster zurück me, mit einem zweiten, um die Sitzung zu beenden. Oder verwenden Sie sogar eine Flag-Datei, der Folgendes sudovorangestellt [ -f ~/.keep.me ] && del ~/.keep.meund gefolgt wird [ \! -f ~/.keep.me ] && exit: Sie benötigen dann nur ein Skript oder einen Alias ​​für einen Befehl meals :>~/.keep.me; exit. Jetzt exitbeenden Sie Ihre Sitzung und mekehren zu Ihrer Anmeldesitzung zurück.
AFH
1
Bitte denken Sie daran, in Ihrer endgültigen Version zu schreiben /bin/bashund bashaus Sicherheitsgründen nicht einfach (um Trojaner zu vermeiden ). Besonders wenn es eine sudovorher gibt ...
Hastur

Antworten:

11

Diese Zeile sollte für Sie funktionieren

ssh -t me@machine "sudo su - specialuser" 

Diese Lösung gibt mir je nach -tSchalter eine Aufforderung oder nicht

ssh -t me@machine "/bin/bash -l"   # Give me a prompt

ssh  me@machine "/bin/bash -l"     # Give me NO prompt
ssh  me@machine                    # Give me NO prompt

Notizen von man ssh

-t
Pseudo-Tty-Zuordnung erzwingen. Dies kann verwendet werden, um beliebige bildschirmbasierte Programme auf einem Remote-Computer auszuführen, was sehr nützlich sein kann, z. B. bei der Implementierung von Menüdiensten. Mehrere -t-Optionen erzwingen die Zuweisung von tty, auch wenn ssh keine lokale tty hat .

Hastur
quelle
Dies funktioniert bei mir ... kann dies auch über die hostspezifische Einstellung ~ / .ssh / config erfolgen?
Hey
1
@where, ja das kannst du machen mit RequestTTY force(was gleich ist -t) und RemoteCommand sudo su - specialuser! Beachten Sie jedoch, dass andere Programme, die SSH verwenden (wie scp, rsync usw.), für diesen Host nicht mehr ordnungsgemäß funktionieren.
Robert Riedl