web-dev-qa-db-fra.com

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

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

99% du temps lorsque 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 pour être sûr d'être placé directement dans ce répertoire lors de ma connexion?

48
Bob Flemming

Il existe deux façons d'y parvenir:

  • Changez votre répertoire principal sur le serveur en/var/www/sites Web (ce n'est pas vraiment une bonne idée)
  • ajouter cd /var/www/websites à la fin de votre .bashrc. J'utilise celui-ci sur nos marionnettistes car je veux toujours être dans/etc/puppet/environnements/dkaarsemaker là-bas au lieu de mon homedir :-)
67
Dennis Kaarsemaker

Si vous utilisez des clés pour la connexion SSH, vous pouvez modifier le chemin d'accès en ajoutant command= à avant une clé dans ~/.ssh/authorized_keys sur votre distant serveur. 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é sur le serveur peut contenir la commande que l'autre ne peut pas - de cette façon, vous sélectionnez le comportement attendu au moment de la connexion. Vous pouvez simplement conclure 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:~$ _
16
gertas

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

Si vous placez les éléments suivants dans votre ~/.profile (pour affecter uniquement 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 en celui spécifié dans la variable d'environnement lorsque vous vous connecterez, s'il est spécifié et s'il s'agit d'un répertoire.

7
Victor Jerlin