Por padrão, a única variável de ambiente transmitida por uma conexão SSH é TERM
. Você pode empacotar informações lá, mas você precisa ter certeza de que ele será descompactado no lado do servidor. O cliente pode transmitir outras mensagens, mas o servidor precisa ser configurado para aceitá-las com uma diretiva AcceptEnv
em /etc/sshd_config
. Sob o Debian e a maioria dos derivados (Ubuntu, Mint,…) todas as variáveis cujo nome começa com LC_
também são aceitas pelo servidor SSH. Essas variáveis são convencionalmente usadas para configurações de localidade, mas você pode usar uma das suas próprias para passar outra coisa. Se o seu servidor permitir, você pode simplesmente escrever
LC_STARTUP_OPTION=A ssh
Outra possibilidade é execute um comando baseado na chave de autenticação do usuário (isso requer apenas o controle de ~/.ssh/authorized_keys
, não a configuração do sshd).
Se você não for capaz de transmitir variáveis de ambiente, você pode configurá-lo na linha de comando e executar um shell interativo, como você está fazendo. Como você está executando um novo shell (isso é necessário porque você não pode especificar um comando inicial para executar e obter um shell interativo), isso precisa ser uma variável de ambiente, não uma variável de shell.
ssh -t machine@domain 'export STARTUP_OPTION="A"; exec /path/to/zsh'
Ainda outra abordagem é alimentar alguns dados para o shell através de sua entrada padrão e, em seguida, redirecionar a entrada padrão para o terminal.
ssh -t localhost 'echo "echo foo; exec </dev/tty" | exec zsh -i'
stdin: is not a tty
stty: standard input: Inappropriate ioctl for device
~%
Apesar das mensagens de erro sobre não ser capaz de inicializar o terminal, o zsh parece lidar adequadamente com a parte interativa da sessão.