Ändern Sie das Standardverzeichnis, wenn ich SSH auf Server

42

Ich habe mich gefragt, ob es eine Möglichkeit gibt, das Standardverzeichnis zu ändern, in das ich nach dem SSH auf meinem Ubuntu-Server verschoben werde.

In 99% der Fälle, in denen ich mich bei meinem Server anmelde, wird auf Dateien in einem bestimmten Verzeichnis zugegriffen:

/var/www/websites

Gibt es eine Konfigurationsdatei, die ich bearbeiten kann, um sicherzustellen, dass ich beim Anmelden direkt in dieses Verzeichnis verschoben werde?

Bob Flemming
quelle

Antworten:

62

Es gibt zwei Möglichkeiten, dies zu erreichen:

  • Ändern Sie Ihr Homeverzeichnis auf dem Server in / var / www / websites (dies ist keine wirklich gute Idee).
  • füge cd /var/www/websitesan das Ende deines .bashrc. Ich benutze diese auf unseren Puppenmeistern, da ich immer in / etc / puppet / surroundings / dkaarsemaker sein möchte, anstatt in meinem Homedir :-)
Dennis Kaarsemaker
quelle
Vielen Dank. Ich habe die Datei bash.bashrc bearbeitet, die sich im Verzeichnis / etc befand. Hat gut geklappt :)
Bob Flemming
7
Oh, das würde ich nicht tun, da es alle Benutzer betrifft. Besser zu bearbeiten /home/yourlogin/.bashrc
Dennis Kaarsemaker
6
Möglicherweise möchten Sie dies in Ihre .profileeinfügen .bashrc, dies hängt jedoch von Ihrem Anwendungsfall ab. .profilewird nur für interaktive Anmeldungen (z. B. Shell) ausgeführt, .bashrcwird jedoch auch für nicht interaktive Anmeldungen (z. B. scp, rsync usw.) ausgeführt. Außerdem wird .profile eher von Shells aufgerufen, die nicht bash sind (z. B. zsh).
Phord
.bashrc wird ausgeführt, wenn Sie "exec bash" ausführen, um Ihre Bash zu aktualisieren. Das Ändern der bashrc für einen speziellen Anwendungsfall (hier ssh login) ist nicht sinnvoll.
user3123159
14

Wenn Sie Schlüssel für die SSH-Anmeldung verwenden, können Sie den Pfad ändern, indem Sie command=einen Schlüssel ~/.ssh/authorized_keysauf Ihrem Remote- Server voranstellen . Beispiel:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

Es ist in Ordnung, mehrere Schlüssel für denselben Benutzer zu generieren und zu verwenden. Ein Schlüssel auf dem Server enthält möglicherweise den Befehl, der andere möglicherweise nicht. Auf diese Weise wählen Sie das erwartete Verhalten zum Zeitpunkt der Anmeldung aus. Sie können es einfach mit local abschließen ~/.ssh/config:

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

Folgendes wird passieren:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

oder:

local$ ssh my-host
webmaster@realhostname:~$ _
gertas
quelle
3
Ich bevorzuge diese Frage vor der angenommenen. Dies ermöglicht es mehreren Benutzern, denselben Benutzer auf dem Server zu verwenden und trotzdem anzupassen, was passiert, wenn Sie sich persönlich anmelden. Viel flexibler und genauso korrekt wie der andere.
Testbenutzer
1
Hier muss man sehr vorsichtig sein, da das Hinzufügen von Befehlen zu ~ / .ssh / authorized_keys die anderen auf ssh basierenden Tools wie rsync, scp beeinflusst. Diese Befehle
bleiben
1
Sie können verwenden, $SSH_ORIGINAL_COMMANDanstatt /bin/bash -ldie Tools zum Laufen zu bringen (in meinem Fall hg). Oder $SHELLwenn Sie nicht fest programmieren möchten, um zu schlagen. Ich bin nicht sicher, wie ich Tools und Benutzeranmeldungen zum Funktionieren bringen kann.
Am
Nur ein Wort zur Vorsicht: Wenn Sie PasswordAuthentication deaktiviert haben (siehe askubuntu.com/questions/346857/… ) und versehentlich Ihre Befehlszeichenfolge falsch eingegeben haben, können Sie sich aus dem System ausschließen.
karan.dodia
6

Openssh sshd akzeptiert standardmäßig die folgenden Umgebungsvariablen vom Client:

AcceptEnv LANG LC_*

Damit können Sie einen Wert aus der lokalen Umgebung des Clients wie folgt an den Server senden:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

Sie können die SendEnv-Direktive in ~ / .ssh / config platzieren, damit Sie sie nicht in die Befehlszeile einfügen müssen.

Wenn Sie Folgendes in Ihr ~ / .profile einfügen (um nur interaktive Anmeldungen zu beeinflussen, verwenden Sie .profile, um alle Anmeldungen zu beeinflussen, verwenden Sie .bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

Anschließend wird das Verzeichnis automatisch in das Verzeichnis geändert, das in der Umgebungsvariablen angegeben ist, wenn Sie sich anmelden, wenn es angegeben ist und wenn es sich um ein Verzeichnis handelt.

Victor Jerlin
quelle
1
+1 für LC_*Trick
Orient