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.

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?


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 .


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'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.