SSH-Äquivalent von .profile / .bashrc

14

Ich suche nach einer Möglichkeit, einige Aliase in meiner Sitzung auf jedem Server, zu dem ich ssh möchte, automatisch zu definieren. Ich kann sie nicht in den .bashrcDateien auf dem Server ablegen, da die Benutzerkonten, mit denen ich mich anmelde, von anderen Personen gemeinsam genutzt werden und außerdem Dutzende von ihnen vorhanden sind. Die Verwaltung eines Skripts auf jedem Computer wäre schmerzhaft. Ich weiß, dass ich expectdie Aliase automatisch eingeben könnte, aber ich habe mich nur gefragt, ob OpenSSH irgendetwas eingebaut hat, das möglicherweise verwendet werden könnte, um dies zu erreichen.

Ramon
quelle

Antworten:

7

Es ist nichts falsch daran, es in Erwartung zu tun. Die andere Art, wie ich es gemacht habe, ist auch ziemlich schmutzig. Mit einem Skript scp zuerst das Profil, das Sie ausführen möchten, dann ssh in, starte es und bleibe in Verbindung.

Platzieren Sie also alle Profileinstellungen in einer lokalen Datei .<local username>-<hostname>-init.shund führen Sie das folgende Skript aus, um sich beim Remote-Host anzumelden.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"
Sirch
quelle
Ich mag das, weil es keine spezielle Konfiguration auf dem Server erfordert, nett!
Ramon
4

Sie können Ihre Konfiguration eingeben .bashrcund erst beim Anmelden ausführen lassen. Um dies zu ermöglichen, können Sie eine Umgebungsvariable über ssh übergeben.

.bashrc Änderungen

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config Änderungen:

AcceptEnv ... IAMTHEGREATEST

.ssh/config Modifikationen (Client-Seite):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc Modifikationen (Client-Seite):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(ungetestet, sollte aber tun)

krissi
quelle
Wie wird damit das Ziel erreicht, auf jedem Server, an dem sich das OP anmeldet, automatisch einzurichten?
womble
Es tut nicht. Es löst den Teil der Frage "Die Benutzerkonten, mit denen ich mich
anmelde,
Das ist fast genau das, was ich tue, aber mit einem Unterschied: Anstatt diese Umgebungsvariable von außen zu akzeptieren, habe ich sie im SSH-Schlüssel selbst festgelegt. Dies bedeutet, dass .ssh / authorized_keys Zeilen enthält, die mit environment = "IAMTHEGREATEST = forsure" beginnen. Ssh-dss ...
Bron Gondwana
3

Vom ssh (1) man - Seite, wenn Sie eine Datei erstellen ~ / .ssh / rc , wird es vor dem Login - Shell, um dadurch die Möglichkeit zu tun geben wird ausgeführt des Benutzers ausgeführt werden ‚pre-setup‘ Aufgaben vor der Protokollierung in .. Als Beispiel wurde angegeben, dass Netzwerkfreigaben vor dem Anmelden bereitgestellt werden.

Wenn Sie keine einzelnen ~ / .ssh / rc- Dateien verwenden möchten , können Sie dies auch mit / etc / ssh / sshrc tun . Ein schneller Test zur Überprüfung Ihres bestimmten Benutzernamens oder einer Identifizierungsmethode kann andere daran hindern, überhaupt zu bemerken, dass dies vorhanden ist.

/ etc / ssh / sshrc wird NUR verwendet, wenn ~ / .ssh / rc nicht vorhanden ist, sodass Sie effektiv zwei Komplexitätsebenen erreichen können.

Lornix
quelle
ding ding ding - wir haben einen Gewinner!
Bis auf weiteres angehalten.
Habe das verpasst! Dies sieht zwar ansprechend aus, erfordert jedoch, dass jeder Server einzeln eingerichtet wird, da er sich auf der Serverseite befindet, oder?
Ramon
Ja, Server-Seite, aber Sie müssten nur eine Datei scp über, einmal. Es gibt keine einfache Möglichkeit, einen Befehlsstrom zu senden, der sofort nach der Anmeldung verarbeitet wird. {Grinsen} Gib mir ein bisschen, vielleicht schreibe ich etwas ... {nicht heute!}
lornix
2

Aliase werden von der Shell definiert und interpretiert.

Leider gibt es keine Möglichkeit ssh, sie an die Remote-Shell weiterzuleiten.

Sie könnten einen sshWrapper auf der Client-Seite schreiben , der eine nette Umgebung auf der Remote-Seite einrichtet, aber es wäre nicht schön.

Pierre Carrier
quelle
0

Wenn möglich, würde ich ein kleines Skript speichern, das alles, was Sie wollen, auf einem Server, auf den Sie von überall aus zugreifen können, initialisiert / definiert und nach dem Anmelden auf jedem Server ausführt.

laurent
quelle
0

Eine mögliche Lösung wäre, Ihr Skript so zu platzieren, dass alles auf einem Webserver eingerichtet wird, auf den alle anderen Server zugreifen können.

Dann sollte jeder Server nur ein kleines Skript benötigen, um etwas zu tun:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

Auf diese Weise müssen Sie es nur an einer Stelle aktualisieren.

Gewähren
quelle
-3

Schau dir .ssh / config an

Hier ist ein Beispiel https://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/

Daniel
quelle
Bitte machen Sie nähere Angaben darüber, warum dies Ihrer Meinung nach hilfreich ist.
Zoredache
Wir bevorzugen wirklich, dass Antworten Inhalte enthalten, die nicht auf Inhalte verweisen. Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
user9517