Como SSH em um diretório específico?

39

Freqüentemente faço logon em um servidor e, em seguida, CD em um diretório específico. É possível simplificar esses dois comandos em um?

ssh bob@foo  
cd /home/guest

Gostaria de evitar alterar qualquer coisa em 'foo', se possível, pois precisarei limpá-lo com o administrador do servidor. Eu uso bash, mas estou aberto a respostas em outras conchas.

spuder
fonte

Respostas:

22

Basta colocar como a última linha do seu arquivo ~ bob / .bash_profile em foo:

cd /home/guest >& /dev/null

Agora, cada vez que você efetua login (seja por SSH ou não), o comando cd será executado. Não é necessário mexer com o ssh.

Sei que você escreveu que "gostaria de evitar alterar qualquer coisa em 'foo', se possível", mas se a conta bob @ foo for sua, alterar seu próprio .bash_profile deve ser aceitável, não?

DanB
fonte
2
Por que sim, acho que isso vai funcionar muito bem. Não precisarei obter permissão da TI para fazer essa alteração. Você poderia explicar por que precisa de> & / dev / null?
Spuder
6
Eu acho que deveria ser &> /dev/null. Impede qualquer mensagem de erro que possa ser mostrada apenas no caso de o cd não mudar o diretório para / home / directory. Se você quiser ver essas mensagens, você pode excluir isso.
precisa saber é o seguinte
5
>&e &>são iguais no Bash. O último estilo é o preferido.
Além disso, o redirecionamento para / dev / null impede que o nome do diretório seja ecoado na tela, o que "cd" pode fazer.
DanB
41

Isso funciona com o OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

O último argumento é executado no seu shell de login. O -tsinalizador passou às sshforças sshpara alocar um pseudo-terminal, necessário para um shell interativo. A -lsinalização passada para bashinicia o bash como um shell de logon .

Comunidade
fonte
3
Gostaria de saber, adicionando -l opção para bash ser útil também? ... && exec bash -l
precisa saber é o seguinte
1
@ konsolebox: É uma boa ideia. Eu adicionei isso à minha resposta.
17

Você também pode fazê-lo desta maneira, semelhante à solução do @ EvanTeitelman:

$ ssh -t bob@foo "cd /tmp ; bash"

Ou se você não conhece o shell do outro lado:

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"

Ou assim:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
slm
fonte