Passando variáveis de ambiente para o servidor remoto como um usuário diferente

1

Eu estou tentando definir variáveis ambientais enquanto eu SSH em um servidor remoto em um servidor CentOS. Estou executando o comando como root, mas preciso executar um comando como o usuário do Oracle. Eu encontrei algumas coisas no site, mas nenhuma delas parece funcionar.

ssh $SERVER su $ORACLE_USER 'ORACLE_HOME="/u01/app/oracle/product/11.2.0"; PATH="/u01/app/oracle/product/11.2.0/Opatch:$PATH';  opatch lsiinventory'

Alguém pode me ajudar?

    
por John 22.07.2016 / 15:41

2 respostas

4

Na maioria dos shells, as variáveis não são automaticamente parte do ambiente até que sejam exportadas (na terminologia do shell Bourne). Para sh / bash, use:

ssh $SERVER "su $ORACLE_USER -c 'export ORACLE_HOME=\"/u01/app/oracle/product/11.2.0\";
                                 export PATH=\"/u01/app/oracle/product/11.2.0/Opatch:\$PATH\";
                                 opatch lsiinventory'"

(No bash, alterar uma variável de ambiente existente como $ PATH irá reexportá-lo automaticamente, mas isso não é garantido que seja verdadeiro em todos os shells).

Observe também que ssh não preserva a separação de argumentos e envia tudo como um único parâmetro (que é eventualmente dado a /bin/sh -c "…" ). Para evitar confusão, talvez seja melhor passar apenas um único parâmetro de comando para ssh em primeiro lugar.

    
por 22.07.2016 / 16:12
0

Por que não apenas criar um pequeno iniciador de script de shell no sistema remoto e executá-lo:

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0
exec $ORACLE_HOME/Opatch/opatch lsiinventory

Salve em um arquivo chamado algo como "oplauncher" chmod 755, e use o ssh para fazer logon e executá-lo.

    
por 25.07.2016 / 19:31