Tente dar ao ssh a opção -t
para alocar um terminal.
Esta questão me lembrou de uma das minhas. Eu quero criar um alias que vai ssh
para uma máquina, executa um comando (neste caso, cd
para um caminho fornecido) e, em seguida, me dá um shell. Eu corri centenas de variações disso:
$ ssh user@machine 'cd /some/path/ && bash -i -l'
qual é o melhor que posso fazer. Ele me dá um prompt bash no diretório correto, mas sem controle de tarefa e sem a capacidade de usar as teclas de seta (e alguns outros atalhos). Existe uma maneira fácil de fazer isso?
Eu não posso fazer isso facilmente no final do meu bashrc ou perfil, porque o caminho que eu quero ir irá variar (vou passá-lo como um argumento para o alias) e, ocasionalmente, eu vou mesmo ssh para aquela máquina sem querer ir a lugar algum estranho - o diretório home é bom.
Veja a página man do sshd, seção Authorized_keys File format. Dentro dele tem a opção command="command" que é o que fazer quando a chave se conecta. O comando original incluído para a conexão está incluído em uma variável.
Você pode definir esse comando para executar o bash com um script de inicialização que verifica o valor do comando original e o executa, deixando-o em um shell interativo.
Isso será diferente porque cd
não é um comando, mas sim um shell embutido que altera o diretório de trabalho atual do programa.
Eu tenho medo de nunca ter encontrado uma boa maneira de fazer isso - mas talvez isso ajude a esclarecer alguma confusão.
Acho que o melhor lugar para fazer o seu cd /some/path/
está no seu .bashrc
na máquina remota.