微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我试图从代理服务器在 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 的 system 模块中使用了 os 函数在我的本地运行上述命令:

  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) 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。