gpt4 book ai didi

deployment - 如何通过多个 ssh 防火墙自动部署(使用 PW 身份验证)?

转载 作者:行者123 更新时间:2023-12-04 02:26:37 24 4
gpt4 key购买 nike

我陷入了一些烦人的境地。

在我的桌面和生产服务器之间有一个机器链。像这样的东西:

desktop -> firewall 1 -> firewall 2 -> prod_box 1
-> prod_box 2
-> ...

我正在寻找一种通过 ssh 自动部署到产品盒的方法。

我知道一般有很多解决方案,但我的限制是:
  • 不允许对防火墙 2 进行更改
  • 不允许对 prod 框进行配置更改(仅限内容)
  • 防火墙 1 有我的本地用户帐户
  • 防火墙 2 和 prod 以 root
  • 身份访问
  • 端口 22 是每个链接之间唯一开放的端口

  • 所以,一般来说,我要部署的命令序列是:
    scp archive.tar user@firewall1:archive.tar
    ssh user@firewall1
    scp archive.tar root@firewall2:/tmp/archive.tar
    ssh root@firewall2
    scp /tmp/archive.tar root@prod1:/tmp/archive.tar
    ssh root@prod1
    cd /var/www/
    tar xvf /tmp/archive.tar

    它比现实中的要复杂一些,但这是对要完成的任务的基本总结。

    我已经把我的 ssh key 放在了 firewall1:/home/user/.ssh/authorized_keys,所以没问题。

    但是,我不能对 firewall2 或 prod 盒执行此操作。

    如果我可以在本地从 shell 脚本运行这个(上面的命令),输入我的密码 4 次并完成它,那就太好了。可悲的是,我无法弄清楚如何做到这一点。

    我需要一些方法来链接 ssh 命令。我整个下午都在尝试使用 python 来做到这一点,最终放弃了,因为 ssh 库似乎不支持密码输入式登录。

    我可以在这里做什么?

    必须有某种库可以用来:
  • 使用 key 文件或动态输入的密码
  • 通过 ssh 登录
  • 通过 ssh 隧道链进行远程远程 shell 命令

  • 我不确定要标记这个问题,所以我暂时将其保留为 ssh,部署。

    注意。使用 ssh 隧道和部署工具来推送这些更改会很棒,但是我仍然必须手动登录到每个盒子来设置隧道,而且由于端口阻塞,这无论如何都行不通。

    最佳答案

    我正在处理 Net::OpenSSH::Gateway ,我的另一个 Perl 模块的扩展 Net::OpenSSH就是这样做的。

    例如:

    use Net::OpenSSH;
    use Net::OpenSSH::Gateway;

    my $gateway = Net::OpenSSH::Gateway->find_gateway(
    proxies => ['ssh://user@firewall1',
    'ssh://password:root@firewall2'],
    backend => 'perl');

    for my $host (@prod_hosts) {
    my $ssh = Net::OpenSSH->new($host, gateway => $gateway);
    if ($ssh->error) {
    warn "unable to connect to $host\n";
    next;
    }
    $ssh->scp_put($file_path, $destination)
    or warn "scp for $host failed\n";
    }

    它需要在两个防火墙中都可以使用 Perl,但没有写权限或在那里安装任何其他软件。

    关于deployment - 如何通过多个 ssh 防火墙自动部署(使用 PW 身份验证)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8500513/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com