Problemas ao passar comandos para outro script por meio do ssh

1

Estou tentando o SSH de uma máquina do mac osx para uma máquina baseada no solaris e passar alguns comandos, mas não tenho certeza da melhor maneira de fazê-lo e estou executando todos os tipos de problemas usando os diferentes métodos encontrado online. Neste momento, o mais próximo que tenho de trabalhar é:

fraudcheck.sh

#!/bin/sh
#
SUPNODE="X.X.X.X"
ssh -i /Users/jessebutryn/.ssh/Jesse_id_rsa root@$SUPNODE < /Users/jessebutryn/Documents/scripts/incomplete/fraudcommands.sh

fraudcommands.sh

#!/bin/sh
#
source /root/toolbox/toolbox
jbutryn
fraud 1

Quando executo esses comandos manualmente, a saída é a seguinte:

joyentmac2252:~ jessebutryn$ ssh [email protected]
[root@sup-jpc-west1 ~]# source /root/toolbox/toolbox
Enter your JPC Headnode username: jbutryn
Toolbox - Version 4.4.6 - It's Wednesday, this must be Devon (20161116)
---- Recent Changes ----

Replaced sdc-ldap/ufds with OpenLDAP client
vm/vmi now shows Swap
Moved creds to environment
Added random element to disabler string
fraud() speed up
Added over() for PD overrides
Added RAM to vms_by_pkg / fraud
Added dates to cust()
Big speed up for cust_vms(). You are welcome.

------------------------
[root@sup-jpc-west1 ~]# fraud 1
2017-06-29|2017-06-30
DC      ALIAS         UUID                                  RAM    BILLING_ID                            OWNER                                 CREATED
sw_1    SRADB02PRJOY  f70b0642-020c-cd72-d644-e0453ccd0e56  65536  14bc8e86-d0f8-11e5-a148-b39af8e5cb7b  bc1e2a34-e6fd-c421-d362-aeccb09eb9a4  2017-06-30T20:29:36.853Z
...

No entanto, quando executo o script, ele gera a seguinte saída:

joyentmac2252:~ jessebutryn$ ~/Documents/scripts/incomplete/fraudcheck.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
Toolbox - Version 4.4.6 - It's Wednesday, this must be Devon (20161116)
---- Recent Changes ----

Replaced sdc-ldap/ufds with OpenLDAP client
vm/vmi now shows Swap
Moved creds to environment
Added random element to disabler string
fraud() speed up
Added over() for PD overrides
Added RAM to vms_by_pkg / fraud
Added dates to cust()
Big speed up for cust_vms(). You are welcome.

------------------------
/root/toolbox/toolbox: line 1888: [: =: unary operator expected
2017-06-29|2017-06-30
DC  ALIAS  UUID  RAM  BILLING_ID  OWNER  CREATED

Abaixo está a linha 1888 no script da caixa de ferramentas e nem sei ao certo qual é o objetivo, mas sei que não correspondo a esse usuário:

[root@sup-jpc-west1 ~]# sed '1888!d' sup-toolbox/toolbox
if [ $(who am i | /usr/bin/cut -d' ' -f 1) = "some_user" ]; then

Eu tentei todos os tipos de soluções para passar os comandos incluindo:

echo "jbutryn" | ssh -i ...

ssh -i ... "
jbutryn
fraud 1
"

Eu tentei echo e read os comandos no script fraudcommands. Eu sou relativamente novo em tudo isso, então qualquer ajuda é apreciada. Obrigado!

    
por Jesse_b 01.07.2017 / 00:10

1 resposta

2

Você está recebendo o erro [: =: unary operator expected porque o comando who am i no lado esquerdo $(who am i | ...) não está retornando nenhum texto, portanto, você deve sempre colocar esses campos / variáveis / etc. entre aspas.

O motivo who am i não está retornando nenhum texto, é porque ele fornece as informações sobre o terminal (que só existe se você executá-lo "manualmente"). Infelizmente, o ssh não está iniciando uma sessão de terminal "real / completo" se você estiver executando um comando (a chamada sessão não interativa).  Você deve tentar substituí-lo por, por exemplo, $USER , que é ainda mais eficiente (o acesso variável é muito mais rápido do que iniciar um novo programa):

if [ "$USER" = "some_user" ]; then

Como solução alternativa, você pode executá-lo com ssh -t <script> , que alocará um pseudo-terminal, fazendo com que who am i funcione novamente.

    
por 01.07.2017 / 00:26

Tags