Não tenho certeza de como você pode colocar o seu local .zshrc
no servidor remoto (sem armazená-lo permanentemente), isso funciona para eu alterar meu shell de login no servidor remoto.
Como é uma conta compartilhada, posso usar zsh
somente para mim mesmo com esse método.
Adicione isso ao seu ~/.ssh/config
arquivo na sua máquina local.
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
Pode haver uma maneira imprudente de realizar o que você está procurando, como abaixo.
AVISO Isso não oferece garantias e não parece "sábio", no entanto, consegui colocar meu arquivo local no servidor e obtê-lo no shell de login usando isso.
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
Como funciona?
RemoteCommand
define o que precisa ser executado no lado remoto.
LocalCommand
define o que precisa ser executado no local, que é usado para copiar seu arquivo local para o servidor remoto para fornecê-lo. Aqui está o problema, isso acontece apenas após a conexão 'bem-sucedida' ao host remoto.
Significado:
- Sua conexão com o controle remoto deve estar aberta e ativa
- Seu shell remoto ainda não possui o arquivo, portanto, é necessário aguardar até que o arquivo esteja lá.
sleep
- Seu local usa
sftp
para colocar seu arquivo em servidor remoto, o servidor remoto é ativado sleep
e origina seus scripts.
É super hackish, eu gostaria de saber se existe uma maneira melhor também.
Atualização: isso pode ser usado em vez do tempo de suspensão 'longo':
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
/etc/shells
para que o shell seja selecionável.