O motivo pelo qual você está obtendo um status de retorno inesperado é a maneira como você citou seu comando para o host remoto.
Considere e contraste essas duas afirmações:
a=apple; ssh remotehost "a=banana; echo $a"
a=apple; ssh remotehost 'a=banana; echo $a'
No primeiro caso, o "... $a"
é avaliado antes de o comando ssh
ser executado, levando a essa situação efetiva:
ssh remotehost "a=banana; echo apple"
No segundo caso, o '... $a'
é passado como um literal para o host remoto para execução, levando a essa situação efetiva:
ssh remotehost 'a=banana; echo $a'
Isso é exatamente o que está acontecendo com o seu $?
. Como você o incluiu entre aspas duplas, ele é avaliado antes que o comando seja executado. Seu valor de zero é do seu comando anterior, então o que você está efetivamente executando é algo assim:
connectionTest=$(sshpass -p PASSWORD ssh ... "REMOTEUSER@REMOTEIP "echo quit | netcat ... ; echo 0")
O que você precisa é usar aspas simples para que o shell local o trate como um literal, assim:
connectionTest=$(sshpass -p "${pass}" ssh ... "${remoteUser}@${IP}" "echo quit | netcat -w 5 local.server.local ${telnetPort}; "'echo $?')
Observe que uma sequência de duas partes, como "hello"'world'
, é concatenada como sendo um único valor helloworld
. A primeira parte foi sujeita a avaliação de variáveis; a segunda parte não foi.