#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 для выполнения вышеуказанных команд на моем локальном компьютере для обоих:
- scp скрипт для удаленного:
import os
command = "scp script.sh user@ip:/path/on/remote"
os.system(command)
- scp скрипт для удаленного:
import os
command = "sshpass -p "passowrd" ssh user@ip "cd /path/on/remote ; sudo su -c './script.sh'""
os.system(command)