Frage Ändern Sie das Standardverzeichnis, wenn ich SSH zum Server bin


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

99% der Zeit, wenn ich mich bei meinem Server anmelde, muss ich auf Dateien innerhalb eines bestimmten Verzeichnisses zugreifen:

/var/www/websites

Gibt es eine Konfigurationsdatei, die ich bearbeiten kann, die sicherstellen wird, dass ich direkt in dieses Verzeichnis gestellt werde, wenn ich mich anmelde?


23
2018-04-15 17:19


Ursprung




Antworten:


Es gibt zwei Möglichkeiten, dies zu erreichen:

  • Ändere dein Homedirectory auf dem Server zu / var / www / websites (das ist keine wirklich gute Idee)
  • hinzufügen cd /var/www/websites bis zum Ende deines .bashrc. Ich benutze diese auf unseren Puppetmastern, da ich immer in / etc / puppet / environments / dkaarsemaker statt meines Homedirs sein möchte :-)

40
2018-04-15 17:22



Vielen Dank. Ich habe die bash.bashrc-Datei bearbeitet, die sich im Verzeichnis / etc befand. Arbeitete ein Vergnügen :) - Bob Flemming
Ooh, das würde ich nicht tun, da es alle Benutzer betrifft. Besser, /home/yourlogin/.bashrc zu bearbeiten - Dennis Kaarsemaker
Oh ok, danke für den Tipp! - Bob Flemming
Vielleicht möchtest du das in deine schreiben .profile anstatt .bashrc, aber es hängt von Ihrem Anwendungsfall ab. .profile wird nur für interaktive Logins (z. B. Shell) aber ausgeführt .bashrc wird auch für nicht interaktive Logins (z. B. scp, rsync usw.) ausgeführt. Außerdem wird .profile eher von Shells aufgerufen, die keine Bash sind (z. B. zsh). - phord


Wenn Sie Schlüssel für die SSH-Anmeldung verwenden, können Sie den Pfad durch Voranstellen ändern command= vor einem Schlüssel ein ~/.ssh/authorized_keys auf Ihrem Fernbedienung Server. 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 kann den Befehl enthalten, den der andere möglicherweise nicht hat - auf diese Weise wählen Sie das erwartete Verhalten zum Zeitpunkt der Anmeldung aus. Sie können es einfach mit einpacken lokal  ~/.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

Dies wird geschehen:

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

oder:

local$ ssh my-host
webmaster@realhostname:~$ _

7
2017-12-24 01:03



Ich bevorzuge diese Frage über die akzeptierte. Es ermöglicht mehreren Benutzern, den gleichen Benutzer auf dem Server zu verwenden und trotzdem anzupassen, was passiert, wenn Sie sich persönlich einloggen. Viel flexibler und korrekter als der andere. - testuser
Sie müssen hier sehr vorsichtig sein, da das Hinzufügen von Befehlen zu ~ / .ssh / authorized_keys die anderen Tools beeinflusst, die auf ssh wie rsync, scp basieren. Diese Befehle hängen einfach - warunapww


Openssh sshd akzeptiert standardmäßig diese Umgebungsvariablen vom Client:

AcceptEnv LANG LC_*

Damit können Sie einen Wert aus der lokalen Umgebung des Clients 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 aufnehmen müssen.

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

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

Dann 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 ein Verzeichnis ist.


2
2017-10-25 14:38



+1 für LC_* Trick - Orient