将数据从集群本地复制到 pod 的脚本既不工作也不给出任何错误

Script to copy data from cluster local to pod is neither working nor giving any error

我试图从代理服务器在 K8S 集群节点上 运行 的 bash 脚本如下:

#!/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'。 如果可以,请提出背后的原因,或提出执行此操作的替代方案。 提前谢谢你。

问题现已解决。

其实是后来才知道的权限问题。所以我要做的是解决,首先 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。

我在 python 的 os 模块中使用 system 函数来 运行 我本地的上述命令:

  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)