força ssh a mudar dir após login baseado em config

2

Existe alguma maneira de forçar o ssh a alterar seu diretório de trabalho em ~/.ssh/config ou usando outros arquivos de configuração?

Eu tenho muitos servidores com diferentes ambientes. Cada ambiente é instalado em um diretório específico e seria realmente útil estar neste diretório específico logo após o login.

Infelizmente, às vezes, vários ambientes podem ser hospedados no mesmo servidor.

É por isso que preciso fazer com que seja baseado em configuração, já que atualmente tenho uma entrada separada em config para cada env. Exemplo:

Host env1
User me
Port 2222
# here directory should be /srv/project/env1
HostName 172.16.16.2

Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
HostName 172.16.16.2

Host env54
User me
Port 2225
# here directory should be /srv/project/env54
HostName 172.16.16.3

Eu posso fazer isso com ssh -t env54 'cd /srv/project/env54 ; bash' , mas é irritante redigitá-lo toda vez ou até colocá-lo em alias .

Eu acredito que a maneira * nix é lidar com isso via configuração.

    
por rush 03.07.2014 / 09:56

3 respostas

4

No servidor, em .profile ou o que for executado quando você efetuar login:

if [ -n "$USE_DIR_A" ]; then
    cd dir_a
elif [ -n "$USE_DIR_B" ]; then
    cd dir_b
fi

Em seguida, na máquina local, defina ambas variáveis:

export USE_DIR_A=yes
export USE_DIR_B=yes

e defina seu .ssh/config assim:

Host env1
User me
Port 2222
# here directory should be /srv/project/env1
SendEnv USE_DIR_A
HostName 172.16.16.2

Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
SendEnv USE_DIR_B
HostName 172.16.16.2

Claro, você poderia ter apenas uma configuração ssh que envia uma variável e definir essa variável para o diretório que você deseja para cada máquina, mas não é isso que você pediu.

No entanto, tenha cuidado com o compartilhamento de conexão SSH: ele pode afetar quais scripts são executados na inicialização em conexões subsequentes.

    
por 03.07.2014 / 14:21
2

Você pode usar o sinalizador command=cd /srv/project/env1 && bash no servidor remoto ~/.ssh/authorized_key para a chave pública apropriada para o servidor de origem. Para obter mais informações, você pode verificar este question no serverfault e para obter mais informações sobre opções úteis como o comando em chave pública no arquivo authorized_keys, verifique este blog .

Eu tentei isso na minha máquina de teste (Centos 6.5 no VirtualBox) e funciona bem.

[root@CentOS-VM1 ~]# ssh nischay@localhost
[nischay@CentOS-VM1 demo]$ pwd
/tmp/demo

Conteúdo de ~/.ssh/authorized_keys é

command="cd /tmp/demo && bash" ssh-dss AAAAB3NzaC1kc3MAAACBAOEKjYcSts6XZEtdzlYCAArgijN2yzi1RwlhOf7E2LHPqUI6z+od9Ye/E5e0imaJhyGvfb21b6o3U6PzWrwVIGZn9TA2/iiaaQS2R2w60/R07FY1tmas8y6TTmfelir/ZfAQnq4OT1KEf5SsYk4TIaC1h5gIL3wGhZyh54dsL1w1AAAAFQCj22qNcmQPToLi/P7sXH3SplxK8QAAAIEAsbiS8hQMjE0HkdCL0sT8/GFBJIo8EuNQh4AEjRv/5DU8Vk5i1CV7qO//spp8h/l5cDBWEC30VBWYk9jbN647VQonn24oXz3aXyQCsPYuqCDGl1MqhUdbHunXk9+YSU7Z13xc66LOD+oURJxFGTzndG5TnvPwhbSZsxebWMPlciYAAACAAe/gdrLn4Zkdp72Oa4JYKbaVD0rhW/p5eg+lSX8cm1m6nbYvGzcfaKF3cKTggGJH37IrDpMnAmuxzFJOryefDeUqGd/HmUOVN8PFnIJpSDQ1StOFx+0WwpiOHLXF4aaOpE/3SLrweuxywWDv4wymp0rXoSzL4mtNtB+u3pEOTgU= root@CentOS-VM1

Outras opções, como número da porta, alias para nome do host, nome de usuário, chave privada e opções de encaminhamento de porta, podem ser mencionadas no arquivo ~/.ssh/config na caixa de origem.

    
por 03.07.2014 / 10:19
0

Suponho que entendi sua pergunta corretamente e que você tem diferentes portas SSH para diferentes ambientes. Em caso afirmativo: -

Adicione uma variação do seguinte ao seu .bash_profile em cada máquina remota: -

if [[ ! -z $SSH_CLIENT ]]; then
    PORT=$(echo "$SSH_CLIENT" | awk '{print $3}')
    case $PORT in
        2222)
            cd /srv/project/env1
        ;;
        2225)
            cd /srv/project/env2
        ;;
    esac
if
    
por 03.07.2014 / 10:27