Estou tentando ssh
mudar automaticamente para um diretório específico quando faço login. Tentei fazer esse comportamento funcionar usando as seguintes diretivas em ~/.ssh/config
:
Host example.net
LocalCommand "cd web"
mas sempre que entro, vejo o seguinte:
/bin/bash: cd web: No such file or directory
embora haja definitivamente uma web
pasta no meu diretório pessoal. Mesmo usando um caminho absoluto dá a mesma mensagem. Para ser claro, se eu digitar cd web
após o login, chego à pasta correta.
O que estou perdendo aqui?
EDITAR:
Diferentes combinações de aspas/caminhos absolutos dão diferentes mensagens de erro:
LocalCommand "cd web"
/bin/bash: cd web: No such file or directory
LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory
LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error
Isso me faz pensar que as aspas não deveriam estar lá, e que há outro erro acontecendo.
Isso funciona:
Para criar um diretório se ele não existir:
Se você não adicionar
bash
ao final do caminho, sairá após acd
execução do comando. E se você não adicionar--login
, então o seu~/.profile
não é originado.~/.bash_profile
cd /path/to/your/destination
/path/to/your/destination
cd é um shell embutido. LocalCommand é executado como:O que você quer fazer não pode ser feito via SSH; você precisa modificar o shell de alguma forma, por exemplo, viabashrc/bash_profile
.<Editando quase uma década depois...>
LocalCommand
não é o que você quer, de qualquer maneira. Isso é executado em sua máquina.Você quer
RemoteCommand
. Algo assim funcionou para mim:Você ativou esta diretiva em sua configuração ssh?
O padrão para isso é
no
, caso em que suaLocalCommand
diretiva seria ignorada.Como alternativa, você tentou adicionar o comando ao seu
.bashrc
arquivo?Solução mais robusta para o caso em que você precisa ssh e substituir o arquivo .bashrc padrão. Isso é útil nos casos em que o ambiente do servidor remoto tem várias docroots e é usado por vários usuários.
Mais detalhado:
.bashrc_tmp
o arquivo no/tmp
diretório no servidor remoto com um conteúdocd /path/to/dir
bash
com o arquivo de configuração especificado na etapa 1. Isso permite alternar para o diretório desejado e suprimir o padrão.bashrc
.alias
, portanto, no prompt de comando do cliente ssh, ele pode ser chamado comossh_myserver
Então já procurei em vários sites (stackoverflow, esse aqui) mas não encontrei o que queria. Acabei criando meu próprio script de shell. Estou colando aqui. Além disso, você pode copiá-lo em um diretório no $PATH.
Então, depois disso. Eu faço:
Nota: Você pode precisar sair e fazer login novamente depois de alterar a variável de caminho
Em seu
~/.ssh/config
:No final do seu
~/.bashrc
:Eu tentei fazer isso usando a passagem de variáveis, inclusive com uma variável exportada, mas esses comandos são executados em shells diferentes.
Ao testar o que você estava tentando fazer, não recebi um erro quando usei o caminho absoluto sem aspas, a propósito. Eu adicionei
; pwd
no final do comando e o diretório correto é exibido, no entanto, o diretório em que acabo é~
. Não hácd
comandos nos meus arquivos de inicialização do shell. Tentei colocar um diferente (cd somedir; pwd
com~/.ssh/rc
o outro ainda no lugar). Oconfig
comando é executado antes que o motd seja emitido e orc
comando seja emitido posteriormente, mas antes que os arquivos de inicialização do shell sejam originados. Então, novamente, está acontecendo em um shell diferente.Experimente a técnica de passagem por arquivo e deixe-me saber se funciona para você.
Já tentou sem as aspas? Os únicos exemplos que eu vi não os têm, então com eles pode estar tentando executar cd\web como um comando.
Você também pode tentar isso, com a opção
-t
:Tente usar
RemoteCommand
em vez disso, por exemplo