Puis-je SSH dans un répertoire spécifique?

9

Je me connecte chaque jour à une multitude de serveurs différents et certains d'entre eux ont des structures de système de fichiers différentes pour leurs sites Web. Chaque fois que je change de serveur, je dois déterminer où je vais accéder aux fichiers que je veux vraiment (car c'est très rarement dans lequel je veux être ~).

J'utilise des fichiers Fabric pour automatiser toutes mes actions (pousser vers git, SSH automatisé vers le serveur pour tirer depuis git, redémarrer l'application web, changer les dépendances, etc.), donc je me demandais si je ne pouvais pas aussi lui dire que je voulais à SSH dans le bon répertoire afin que je puisse exécuter fab sshet être dans une session SSH normale, juste au bon endroit et commencer à travailler immédiatement.

Il ne s'agit cependant pas de Fabric; veuillez l'ignorer. Fabric exécute simplement un lot de commandes. Mon argument est avec la sshcommande. C'est ce que je vais dire à Fabric de faire.

Alors, comment puis-je accéder sshà cdun répertoire spécifique lors de la connexion?

Remarque: cela ne peut pas être un serveur ou une chose à l'échelle de l'utilisateur. J'ai plusieurs sites Web sous un seul utilisateur sur certains serveurs, donc coller quelque chose ~/.bashrcne fonctionnerait pas pour moi.

Oli
la source

Réponses:

9

Eh bien, je savais que je pouvais exécuter quelque chose lors de la connexion, mais je savais qu'il sortirait tout de suite après l'exécution. Ce dont je me souviens maintenant, c'est que je peux exécuter autant que je veux sur un serveur distant. Vous pouvez simplement enchaîner les commandes!

ssh user@server -t "cd /websites/website ; /bin/bash"

Maintenant, je peux simplement dire au tissu de le faire et nous sommes partis. Facile.


J'ai dit que cela n'avait rien à voir avec le tissu, mais voici également la nouvelle partie de mon script de tissu, basée sur ce qui précède:

def ssh():
    ''' SSH into the remote server at the correct directory '''
    local('ssh -t -p%(port)s %(server)s "cd %(remote_dir)s ; /bin/bash"' % {
        'server': server_host,
        'port': server_port,
        'remote_dir': remote_dir,
    })

Je crée un lien symbolique autour du même script pour que les variables ( server_host, server_portet remote_dir) changent d'un site à l'autre.

Étant donné que Fabric peut gérer la connexion sortante, vous pouvez également procéder comme suit:

def ssh():
    ''' SSH into the remote server at the correct directory '''
    run('cd %s ; /bin/bash' % remote_dir)

Cela fonctionne mais la sortie est précédée d'une chaîne de Fabric. Cela m'a fait plus de 80 caractères et même si j'ai des tonnes de résolution, c'est trop pour moi :)

Oli
la source