Automaticamente ssh no host remoto dependendo da pasta em que você está

0

Existe uma solução (ou plugin para zsh) que me permita usar o ssh remoto dependendo da pasta no sistema operacional local? Semelhante ao PyENV.

Então, se eu desenvolver um projeto e fizer

cd /home/projects/ERP
ssh production
ssh development

para que, com comandos fáceis de lembrar, eu entre direto no host remoto desejado?

Eu entendo que eu posso fazer aliases e carregá-los de uma pasta local quando eu alternar dirs, mas existe uma maneira melhor?

Obrigado Dmitry

    
por DmitrySemenov 08.11.2018 / 06:03

1 resposta

2

Aparentemente, não tenho reputação suficiente para comentar para pedir esclarecimentos, por isso vou adivinhar aqui e editar minha resposta conforme necessário, se estiver incompleta.

Eu não sei de nenhum desses plugins, mas escrever um não seria muito difícil. Seu caso de uso não é comum, então esse é provavelmente o caminho a seguir. Existem 5 maneiras diferentes de fazer isso.

Primeiro, porém, devo mencionar que é totalmente possível ter "aliases de host" no seu /etc/ssh/ssh_config ou ~/.ssh/config , o que torna fácil atribuir um alias de host específico a um conjunto de opções de configuração para SSH.

Abaixo está um exemplo.

Host router
    Hostname 10.0.0.1
    Port 222
    User root

Isso tornaria a digitação ssh router equivalente à digitação de ssh [email protected] -p 222 .

Isso provavelmente cobre uma quantidade significativa do seu caso de uso. Desculpe se você já sabia disso - estou apenas tentando cobrir todas as bases, aqui.

Se você realmente precisa do SSH para interpretar um comando SSH fixo de maneiras diferentes, você provavelmente precisará de um wrapper em torno do comando SSH que examine os argumentos de entrada, reconheça os principais (por exemplo, produção ou desenvolvimento), interprete-os, em seguida, escolhe um dos hosts possíveis (possivelmente pré-configurado na configuração do SSH), dependendo do valor de $PWD .

Deixe-me saber se isso ajuda! ^. ^

Atualização: muito obrigado a @ fra-san, que apontou uma muito opção mais elegante! : D (No mínimo, muito mais elegante se você tiver relativamente poucos casos especiais ...)

Você pode simplesmente fazer:

Match host production, exec ssh_match_dir
    Port 5555
    Hostname foodev.biz

Onde ssh_match_dir é um script em seu PATH que sai com status 0 quando detecta que a condição deve ser aplicada, da seguinte forma:

#!/usr/bin/env bash
if test "$PWD" = "/home/a/git"; then
    exit 0
else
    exit 1
fi

Não deixe de olhar para man ssh_config e prestar atenção especial à seção TOKENS - que inclui informações sobre argumentos que você pode dizer a ssh para passar para o script para adicionar condições extras. Eu acredito que você poderia ter um único script para lidar com cada host com diferentes condições arbitrárias se você usasse exec ssh_match_dir %h e adicionasse alguma análise de argumento ao script - dependendo do seu caso de uso.

    
por 08.11.2018 / 06:41

Tags