87 votes

Changer le répertoire par défaut lorsque je me connecte en SSH au serveur

Je me demandais s'il y avait un moyen de changer le répertoire par défaut dans lequel je suis placé lorsque je me connecte en SSH à mon serveur Ubuntu.

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

/var/www/websites

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

109voto

jowi Points 111

Il existe trois façons d'y parvenir :

  • ajouter cd /var/www/websites à la fin de votre .bash_profile . Cette opération est exécutée uniquement pour les connexions interactives (par exemple, ssh).
  • ajouter cd /var/www/websites à la fin de votre .bashrc . J'utilise celui-ci sur nos puppetmasters car je veux toujours être dans /etc/Puppet/environments/dkaarsemaker là au lieu de mon homedir :-)
  • Changez votre répertoire d'origine sur le serveur en /var/www/websites (ce n'est pas vraiment une bonne idée).

39voto

igorsantos07 Points 470

Depuis OpenSSH 7.6, vous pouvez utiliser la nouvelle option RemoteCommand pour y parvenir.

Dans votre ~/.ssh/config :

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/keyfile
    User webmaster
    RequestTTY force # check if this is necessary
    RemoteCommand cd /var/www/websites && bash -l

26voto

Someone Points 111

Attention ! Essayez d'abord sur un compte non essentiel, car si vous faites une erreur dans la commande, vous risquez de perdre l'accès au système distant.


Si vous utilisez des clés pour la connexion SSH, vous pouvez modifier le chemin en ajoutant le préfixe command= avant une clé dans ~/.ssh/authorized_keys sur votre à distance serveur. Exemple :

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

Il est possible de générer et d'utiliser plusieurs clés pour le même utilisateur. Une clé sur le serveur peut contenir la commande, l'autre pas - de cette façon, vous choisissez le comportement attendu au moment de la connexion. Vous pouvez simplement l'emballer 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:~$ _

9voto

Victor Jerlin Points 490

Openssh sshd accepte par défaut ces variables d'environnement de la part 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 pour ne pas avoir à l'inclure dans la ligne de commande.

Si vous placez les éléments suivants 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 changera automatiquement de répertoire pour celui spécifié dans la variable d'environnement lorsque vous vous connecterez, si elle est spécifiée et s'il s'agit d'un répertoire.

1voto

MrGibbage Points 2548

Une autre option consiste à changer toute la maison : usermod -d /var/www/websites yourusername

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X