Changer le répertoire par défaut lorsque je SSH sur le serveur

43

Je me demandais s'il existe un moyen de changer le répertoire par défaut dans lequel je suis mis après SSH sur mon serveur Ubuntu.

99% du temps quand je me connecte à mon serveur, c'est pour accéder aux fichiers d'un répertoire spécifique:

/var/www/websites

Existe-t-il un fichier de configuration que je peux éditer qui m'assurera que je suis directement placé dans ce répertoire lorsque je me connecte?

Bob Flemming
la source

Réponses:

63

Il y a deux façons d'y parvenir:

  • Changez votre répertoire personnel sur le serveur en / var / www / websites (ce n'est pas vraiment une bonne idée)
  • ajoutez cd /var/www/websitesà la fin de votre .bashrc. J'utilise celui-ci sur nos marionnettistes car je veux toujours être dans / etc / puppet / environment / dkaarsemaker à la place de mon répertoire personnel :-)
Dennis Kaarsemaker
la source
Merci. J'ai édité le fichier bash.bashrc qui se trouvait dans le répertoire / etc. Travaillé un régal :)
Bob Flemming
7
Oh, je ne ferais pas cela, car cela concerne tous les utilisateurs. Mieux vaut éditer /home/yourlogin/.bashrc
Dennis Kaarsemaker
6
Vous voudrez peut-être mettre ceci dans votre à la .profileplace de .bashrc, mais cela dépend de votre cas d'utilisation. .profileest exécuté uniquement pour les connexions interactives (par exemple, shell), mais .bashrcégalement pour les connexions non interactives (par exemple, scp, rsync, etc.). En outre, il est plus probable que .profile soit appelé par des shell non bash (par exemple, zsh).
phord
.bashrc est exécuté lorsque vous exécutez "exec bash" pour actualiser votre bash. Changer le bashrc pour un cas d'utilisation spécial (ici ssh login) n'est pas utile.
user3123159 le
14

Si vous utilisez des clés pour la connexion SSH, vous pouvez modifier le chemin en ajoutant command=avant la saisie ~/.ssh/authorized_keyssur votre serveur distant . Exemple:

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

Il est bon de générer et d’utiliser plusieurs clés pour le même utilisateur. Une clé du serveur peut contenir la commande, mais pas l’autre - de cette manière, vous sélectionnez le comportement attendu au moment de la connexion. Vous pouvez simplement terminer avec local ~/.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

C'est ce qui va se passer:

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

ou:

local$ ssh my-host
webmaster@realhostname:~$ _
Gertas
la source
3
Je préfère cette question au-dessus de celle acceptée. Il permet à plusieurs utilisateurs d’utiliser le même utilisateur sur le serveur tout en conservant la possibilité de personnaliser ce qui se passe lorsque vous vous connectez personnellement. Beaucoup plus souple et aussi correct que l’autre.
testuser
1
Vous devez être très prudent ici car l'ajout de commandes à ~ / .ssh / allowed_keys affecte les autres outils basés sur ssh comme rsync, scp. Ces commandes seront simplement suspendues
warunapww
1
Vous pouvez utiliser $SSH_ORIGINAL_COMMANDau lieu de /bin/bash -lfaire fonctionner les outils (dans mon cas, hg). Ou $SHELLsi vous ne voulez pas coder en dur pour bash. Vous ne savez pas comment obtenir des outils et des connexions humaines pour travailler à la fois.
Mpen
Juste un mot d'avertissement: si vous avez désactivé PasswordAuthentication (voir askubuntu.com/questions/346857/… ) et que vous avez mal saisi votre chaîne de commande, vous pouvez vous verrouiller en dehors du système.
Karan.dodia
6

Openssh sshd accepte par défaut les variables d'environnement du client:

AcceptEnv LANG LC_*

Vous pouvez l'utiliser pour envoyer une valeur de l'environnement local du client au serveur comme ceci:

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

Vous pouvez placer la directive SendEnv dans ~ / .ssh / config afin de ne pas l'inclure dans la ligne de commande.

Si vous placez ce qui suit dans votre ~ / .profile (pour n’affecter que les connexions interactives, utilisez .profile, pour affecter toutes les connexions, utilisez .bashrc):

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

Ensuite, il passera automatiquement du répertoire à celui spécifié dans la variable d’environnement lors de votre connexion, s’il est spécifié et s’il s’agit d’un répertoire.

Victor Jerlin
la source
1
+1 pour l' LC_*astuce
Orient