При использовании нескольких SSH, как показано ниже, я могу запустить только одну команду, если попытаться запустить более одной команды, она не работает.

Эта вещь терпит неудачу:

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

Но правильное разбиение одной и той же команды на две части.

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

Почему это?

2 ответа2

1

Вы пытаетесь вложить команду, используя "" внутри другого набора "" . Это не сработает, если вы не коснитесь внутренней пары. На ваш взгляд, есть две строки в кавычках:

"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

Таким образом, точка с запятой интерпретируется вашей локальной оболочкой, что делает команду mkdir полностью отдельной от ssh.

Упрощенная версия работает по счастливой случайности. (Решающим фактором является то, что у вас нет точки с запятой в кавычках, но также вам повезло, что ssh не волнует, указана ли указанная вами команда в одном аргументе или нет.)

Измените внутреннюю часть на

\"rm -rf /home/$INSTANCE_USER/$INSTANCE_DEPLOY_DIR ;mkdir $INSTANCE_DEPLOY_DIR\"
0

Спасибо Кевину, это работает.

Я нашел еще одно решение для этого.

Во вложенном SSH мы должны использовать одинарную кавычку вместо двойной кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .