A segunda string não é ignorada, está oculta. Para ver, corra
echo "$STR3" | cat -v
O problema é que STR1
termina com um caractere retorno de carro . Esse caractere diz ao terminal para mover o cursor de volta para o começo da linha. É emitido logo antes do caractere normal de nova linha (feed de linha). A razão pela qual ele é emitido é que você disse ao SSH para emular um terminal com a opção -t
, portanto, ele está organizando as coisas para que sejam exibidas corretamente. Isso não fornece um resultado útil quando você está capturando a saída em uma string.
Os comandos que você mostra podem ser executados como qualquer usuário, assim você não precisa do sudo. Se você não precisa de sudo, não precisa de -t
.
STR1='ssh -q -i "$KEYFILE" "$USERNAME@$MASTER" -p 22 'hostname''
STR2='ssh -q -i "$KEYFILE" "$USERNAME@$MASTER" -p 22 "grep search /etc/resolv.conf" | awk {print $2}'
STR3="$STR1$STR2"
Se o seu script real precisar de sudo, tire os caracteres de retorno de carro.
STR='ssh -t … 'sudo mycommand' | tr -d '\r''
Combinar ssh e sudo é complicado. É mais fácil manter o SSH para todo o escalonamento de privilégios. Isso requer que a conta root efetue login com o SSH. Ao contrário do que você pode ter lido em outro lugar, isso não é inerentemente inseguro. Os riscos de elevação de privilégios do usuário local para a raiz tendem a ser superestimados ; Se um invasor tiver acesso a uma conta sudoer, ele terá acesso ao root mesmo assim. No entanto, para manter registros úteis, é melhor restringir o acesso direto à conta raiz. Você pode autorizar o acesso ao root apenas para usuários locais, colocando as seguintes diretivas em sshd_config
:
PermitRootLogin no
…
Match Address 127.0.0.1,::1
PermitRootLogin yes
Match User root
PasswordAuthentication no
GSSAPIAuthentication
KbdInteractiveAuthentication no
Em seguida, o root terá permissão para efetuar login através do SSH, mas apenas com a autenticação de chave e apenas pelo enraizamento do host local. Depois de configurar as chaves, você pode encadear os logins SSH:
STR='ssh … 'ssh root@localhost "mycommand"''