Скрипт для копирования данных из локального кластера в модуль не работает и не выдает никаких ошибок

#shell #kubernetes #scripting #remote-access

Вопрос:

Сценарий bash, который я пытаюсь запустить на узле кластера K8S с прокси-сервера, выглядит следующим образом:

 #!/usr/bin/bash
cd /home/ec2-user/PVs/clear-nginx-deployment
for file in $(ls)
do
    kubectl -n migration cp $file clear-nginx-deployment-d6f5bc55c-sc92s:/var/www/html
done
 

Этот скрипт не копирует данные, которые находятся в пути /home/ec2-user/PVs/clear-nginx-deployment главного узла.

Но это прекрасно работает, когда я пытаюсь выполнить тот же сценарий вручную в целевом кластере.

Я использую python paramiko.SSHClient() для удаленного выполнения сценария:

 def ssh_connect(ip, user, password, command, port):
    try:
        client = paramiko.SSHClient()

        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(ip, username=user, password=password, port=port)

        stdin, stdout, stderr = client.exec_command(command)

        lines = stdout.readlines()

        for line in lines:
            print(line)

    except Exception as error:
        filename = os.path.basename(__file__)
        error_handler.print_exception_message(error, filename)

    return
 

Чтобы убедиться, что вышеуказанная функция работает нормально, я попробовал другой сценарий:

 #!/usr/bin/bash
cd /home/ec2-user/PVs/clear-nginx-deployment
mkdir kk
 

Этот отлично работает с той же функцией python и создает каталог » kk » по нужному пути.
Если бы вы могли, пожалуйста, объяснить причину или предложить альтернативу для этого.
Заранее спасибо.

Комментарии:

1. Как именно вы запускаете этот сценарий ? Вы копируете его на удаленную машину и выполняете оттуда ? Как насчет запуска в режиме отладки ( bash -x script.sh ) ? Вы пытались подключиться по ssh к удаленному хосту и запустить его оттуда без использования клиента paramico ? Можете ли вы запускать все команды отдельно ? У вас нет никаких ошибок ?

2. На самом деле проблема была связана с разрешениями, о которых я узнал позже. Итак, что я сделал, чтобы решить, это сначала отправил сценарий на удаленную машину, а затем запустил этот сценарий с моей машины с правами sudo. Это решило проблему.

Ответ №1:

Теперь этот вопрос решен.

На самом деле проблема была связана с разрешениями, о которых я узнал позже. Итак, что я сделал, чтобы решить, это сначала scp отправил скрипт на удаленную машину с:

scp script.sh user@ip:/path/on/remote

А затем выполните следующую команду с локального компьютера, чтобы запустить сценарий удаленно:

sshpass -p "passowrd" ssh user@ip "cd /path/on/remote ; sudo su -c './script.sh'"

И, как я уже упоминал в вопросе, для этого я использую python.

Я использовал system функцию в os модуле python для выполнения вышеуказанных команд на моем локальном компьютере для обоих:

  1. scp скрипт для удаленного:
 import os

command = "scp script.sh user@ip:/path/on/remote"
os.system(command)
 
  1. scp скрипт для удаленного:
 import os

command = "sshpass -p "passowrd" ssh user@ip "cd /path/on/remote ; sudo su -c './script.sh'""
os.system(command)