Minha abordagem preferida é usar o arquivo de configuração SSH (descrito abaixo), mas existem algumas soluções possíveis, dependendo do seu uso.
Argumentos da linha de comando
Acho que a melhor resposta para essa abordagem é a resposta de christianbundy à resposta aceita:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
O uso de aspas duplas permitirá que você use variáveis de sua máquina local, a menos que elas escapem (como $SHELL
aqui). Como alternativa, você pode usar aspas simples e todas as variáveis que você usar serão as da máquina de destino:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Função Bash
Você pode simplificar o comando envolvendo-o em uma função bash. Digamos que você queira apenas digitar isso:
sshcd example.com /foo/bar
Você pode fazer isso funcionar adicionando isso ao seu ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Se você estiver usando uma variável que existe na máquina remota para o diretório, escape-a ou coloque-a entre aspas simples. Por exemplo, isso fará o cd para o diretório que está armazenado na JBOSS_HOME
variável na máquina remota:
sshcd example.com \$JBOSS_HOME
Arquivo de configuração SSH
Se você deseja ver esse comportamento o tempo todo para hosts específicos (ou qualquer) com o comando ssh normal sem precisar usar argumentos extras da linha de comando, defina as opções RequestTTY
e RemoteCommand
no seu arquivo de configuração ssh.
Por exemplo, eu gostaria de digitar apenas este comando:
ssh qaapps18
mas deseja que ele sempre se comporte como este comando:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Então eu adicionei isso ao meu ~/.ssh/config
arquivo:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Agora, essa regra se aplica a qualquer host com "aplicativos" em seu nome de host.
Para mais informações, consulte http://man7.org/linux/man-pages/man5/ssh_config.5.html