Esta pergunta já tem uma resposta aqui:
Como posso passar um valor para um comando ssh, de modo que o ambiente iniciado na máquina host inicie com uma determinada variável de ambiente definida para a minha escolha?
EDIT: O objetivo é passar a área de trabalho atual do kde (do dcop kwin KWinInterface currentDesktop) para o novo shell criado, para que eu possa retornar os locais nfs para a minha instância do JEdit no servidor original, exclusivo para cada área de trabalho do KDE. (Usando um mecanismo como emacsserver / emacsclient )
A razão pela qual várias instâncias ssh podem estar em andamento ao mesmo tempo é porque, quando estou configurando meu ambiente, estou abrindo várias instâncias ssh diferentes para máquinas diferentes.
fonte
A
SendEnv
opção é sua cara.~ / .ssh / config: (localmente)
/ etc / ssh / sshd_config: (na extremidade remota)
Agora, qualquer que seja o valor
$MYVAR
local, ele também estará disponível na sessão remota.Se você efetuar login várias vezes, cada sessão terá sua própria cópia
$MYVAR
, com valores possivelmente diferentes.~/.ssh/environment
destina-se a outros fins. Ele funciona como um$ENV
arquivo ao executar comandos que não são de shell remotamente.fonte
ssh myserver -o SendEnv="MYVAR"
, para que você possa torná-lo dinâmico em scripts.Você pode passar valores com um comando semelhante ao seguinte:
Você pode testar com:
No tcsh, o seguinte parece funcionar:
fonte
&&
). Usando bash, emexport VAR=value;
vez de setenv na terceira forma, funciona para este caso.ssh user@host "$(<env_to_source.sh) command ..."
. Em env para fonte, eu tenhoexport var=value ;
em linhas separadas (lembre-se do ponto e vírgula).Há também um truque horrível.
Se o seu script estiver consumindo a variável na extremidade remota (ou seja, você pode nomeá-la como quiser), poderá abusar das variáveis de localidade. Qualquer variável do formato LC_ * será transmitida literalmente, sem nenhum requisito de configuração.
Por exemplo, temos uma série de servidores bastiões em um dos meus clientes. Eu odeio ter que me conectar a ele, apenas para me conectar a outro servidor ... e outro servidor ... sempre. Eu tenho um script que se comporta exatamente como SSH, exceto que é inteligente.
Basicamente, se LC_BOUNCE_HOSTS estiver definido, ele o dividirá em espaços e removerá o primeiro host. Em seguida, ele salta e executa o mesmo script. No nó de destino, essa lista está eventualmente vazia e, portanto, executa o comando. Também tenho um modo de depuração (ótimo durante problemas de rede), definido por LC_BOUNCE_DEBUG. Como o ssh transmite tudo isso para mim magicamente, não preciso fazer nada além de reconhecer o final da lista de hosts (o que faço com a opção -).
Eu me sinto sujo toda vez que uso isso, mas funciona em todos os lugares em que tentei.
fonte
ProxyCommand
? Edite seu~/.ssh/config
e adicione um bloco comoHost *.example.com: ProxyCommand -ssh -W %h:%p bastionhost
e permita que ele tunele suas conexões para você.No bash eu testei com:
fonte