Múltiplos SSH não executando mais de um comando

0

Quando usar um SSH múltiplo como abaixo, só posso executar um comando, se tentar executar mais de um comando, ele falhará.

Essa coisa está falhando:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $APP_CLUSTER_USER@$APP_CLUSTER_IP "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $INSTANCE_USER@$INSTANCE_IP "rm -rf /home/$INSTANCE_USER/$INSTANCE_DEPLOY_DIR ;mkdir $INSTANCE_DEPLOY_DIR"" || exit 1

Mas quebrar o mesmo comando em duas execuções corretamente.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $APP_CLUSTER_USER@$APP_CLUSTER_IP "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $INSTANCE_USER@$INSTANCE_IP "rm -rf /home/$INSTANCE_USER/$INSTANCE_DEPLOY_DIR"" || exit 1

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $APP_CLUSTER_USER@$APP_CLUSTER_IP "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $INSTANCE_USER@$INSTANCE_IP "mkdir $INSTANCE_DEPLOY_DIR"" || exit 1

Por que isso acontece?

    
por Ravi Prakash 18.10.2013 / 13:47

2 respostas

1

Você está tentando aninhar um comando usando "" dentro de outro conjunto de "" . Isso não funciona a menos que você inverta o par interno. Do jeito que você tem, existem 2 strings entre aspas:

"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $PEM -t -t $INSTANCE_USER@$INSTANCE_IP "

e

""

e uma série sem aspas de tokens no meio:

rm -rf /home/$INSTANCE_USER/$INSTANCE_DEPLOY_DIR ;mkdir $INSTANCE_DEPLOY_DIR

então o ponto-e-vírgula está sendo interpretado pelo seu shell local original, tornando o comando mkdir inteiramente separado do ssh.

A versão simplificada funciona por pura sorte. (O fator decisivo é que você não tem um ponto-e-vírgula na porção sem aspas, mas também teve sorte que o ssh não se importa se o comando que você deu está em um único argumento ou não.)

Altere a parte interna para

\"rm -rf /home/$INSTANCE_USER/$INSTANCE_DEPLOY_DIR ;mkdir $INSTANCE_DEPLOY_DIR\"
    
por 18.10.2013 / 14:10
0

Obrigado Kevin, isso funciona.

Encontrei mais uma solução para isso.

No SSH aninhado, devemos usar aspas simples em vez de aspas duplas .

    
por 24.10.2013 / 14:20

Tags