Ausführen eines Befehls auf dem Remote-Host mit interaktivem SSH (bedingt)

9

Ich möchte in der Lage sein, jedes Mal, wenn ich mich bei diesem Host anmelde, automatisch einen Befehl auf einem Remote-Host auszuführen, jedoch innerhalb der aktuellen interaktiven SSH-Sitzung.

Etwas wie

ssh user@remotehost [run do.sh]

Wo werden do.shein paar Housekeeping-Aufgaben ausgeführt und dann eine screenSitzung erneut verbunden (derzeit werde ich do.shmanuell ausgeführt, nachdem ich mich beim Host angemeldet habe).

Ich möchte es nicht hinzufügen, .bashrcda ich mich von anderen Computern aus bei diesem Host anmelde und nicht do.shausführen möchte , wenn ich mich von dort aus anmelde. Daher muss es optional sein.

Jim Farkas
quelle
1
warum rennst du nicht einfach ssh user@remotehost /path/to/do.sh? Wenn es funktioniert, können Sie es sogar in .ssh / config oder Ihrer persönlichen .bashrc
Coren
Sie möchten also "do.sh" ausführen, wenn Sie sich von irgendwoher bei remotehost anmelden, aber nicht, wenn Sie sich von irgendwo anders bei remotehost anmelden? Welche Hosts verbinde Sie aus sollte auslösen „do.sh“, und die andere sollte nicht?
Mat
Ja, ich möchte es manchmal ausführen, aber nicht immer. Der Grund dafür ist, dass ich auf meinem Mac eine Tastenkombination von einem Launcher habe, die mir die meiste Zeit das gibt, was ich will . Ich drücke auf eine Verknüpfung und möchte ssh in die Box und dann erneut eine Bildschirmsitzung anschließen, aber ich möchte das nicht tun, wenn ich ein reguläres Terminal wie "ssh user @ host" verwende. Die unten von Patkos erwähnte Lösung macht genau das, was ich brauche.
Jim Farkas

Antworten:

15

Sie könnten so etwas versuchen:

ssh server -t "do.sh; bash --login"

wie hier vorgeschlagen: /server/167416/change-directory-automatically-on-ssh-login

Oder Sie können versuchen, die Option 'LocalCommand' in sshd_conf (oder ~ / .ssh / config) zu verwenden, wie in der offiziellen Manpage beschrieben: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

Patkos Csaba
quelle
1
Vielen Dank!! ssh server -t "/home/user/do.sh; bash --login" hat bei mir funktioniert. köszönöm szépen!
Jim Farkas
1
Szivesen (Gern geschehen)
Patkos Csaba
@PatkosCsaba Bitte vermeiden Sie hier andere Sprachen als Englisch. Dies gilt auch für Kommentare.
LinuxSecurityFreak
3

Ein Teil des Puzzles: Unter der Annahme von OpenSSH setzt der sshClient die folgende Umgebungsvariable:

SSH_CONNECTION Identifiziert die Client- und Serverenden der Verbindung. Die Variable enthält vier durch Leerzeichen getrennte Werte: Client-IP-Adresse , Client-Portnummer, Server-IP-Adresse und Server-Portnummer.

Mithilfe dieser Informationen können Sie also herausfinden, woher Ihre Verbindung stammt .

sr_
quelle