<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>python | 伪架构师</title>
    <link>/tags/python/</link>
      <atom:link href="/tags/python/index.xml" rel="self" type="application/rss+xml" />
    <description>python</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Thu, 03 Mar 2016 00:24:17 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>python</title>
      <link>/tags/python/</link>
    </image>
    
    <item>
      <title>跳板/堡垒机 文件传输工具</title>
      <link>/post/file-transfer-tool-for-ssh-jumpover/</link>
      <pubDate>Thu, 03 Mar 2016 00:24:17 +0800</pubDate>
      <guid>/post/file-transfer-tool-for-ssh-jumpover/</guid>
      <description>

&lt;hr /&gt;

&lt;h2 id=&#34;项目地址-github-https-github-com-fleeto-filejumper&#34;&gt;项目地址 &lt;a href=&#34;https://github.com/fleeto/filejumper&#34; target=&#34;_blank&#34;&gt;github&lt;/a&gt;&lt;/h2&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;

&lt;p&gt;工作中经常需要使用堡垒机/跳板机来登录生产环境中的服务器，逐级进行不厌其烦的文件拷贝。所以就写了这么个东西。&lt;/p&gt;

&lt;p&gt;这是一个简单的脚本，利用配置文件配置好主机信息，以及对应的跳转关系之后，在相关主机中用 screen/tmux 运行该脚本，这一脚本会自动监控 task 文件夹中的任务。一旦发现新的任务，就会根据主机信息，逐级进行上传，并自动回报传输进度。&lt;/p&gt;

&lt;h2 id=&#34;环境依赖&#34;&gt;环境依赖&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Python 2.x&lt;/li&gt;
&lt;li&gt;scp&lt;/li&gt;
&lt;li&gt;sshpass&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;用法&#34;&gt;用法&lt;/h2&gt;

&lt;h3 id=&#34;启动脚本&#34;&gt;启动脚本&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;安装依赖内容&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;建立工作目录，例如 &lt;code&gt;mkdir /root/jumper&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;填写主机信息文件 &lt;code&gt;host.json&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;主机 ID&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;其中 path 代表的是各个主机中在步骤 1 建立的工作目录&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;upstream 代表该主机的上级跳板/堡垒机的主机 ID&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;在各个主机中以 &lt;code&gt;jumper.py [machin id] [working dir]&lt;/code&gt; 形式运行该脚本&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&#34;传输文件&#34;&gt;传输文件&lt;/h3&gt;

&lt;p&gt;下面步骤均在第一跳板上完成。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;把待传输文件放到工作目录的 &lt;code&gt;data&lt;/code&gt; 子目录下。&lt;/li&gt;
&lt;li&gt;编写任务文件，命名随意，扩展名必须为 &lt;code&gt;.json&lt;/code&gt;，格式见后，其中 id , position, status 字段值均为 &amp;ldquo;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;等传输开始，定期查看该任务文件的 log 和 status 字段，获取任务进度&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;配置文件&#34;&gt;配置文件&lt;/h2&gt;

&lt;h3 id=&#34;host-json&#34;&gt;host.json&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;quot;jumper1&amp;quot;: {
    &amp;quot;host&amp;quot;: &amp;quot;10.211.55.42&amp;quot;,
    &amp;quot;user&amp;quot;: &amp;quot;root&amp;quot;,
    &amp;quot;pass&amp;quot;: &amp;quot;ComplexPwd&amp;quot;,
    &amp;quot;port&amp;quot;: &amp;quot;22&amp;quot;,
    &amp;quot;path&amp;quot;: &amp;quot;/root/jumper&amp;quot;,
    &amp;quot;upstream&amp;quot;: &amp;quot;&amp;quot;
  },
  &amp;quot;jumper2&amp;quot;: {
    &amp;quot;host&amp;quot;: &amp;quot;10.211.55.43&amp;quot;,
    &amp;quot;user&amp;quot;: &amp;quot;root&amp;quot;,
    &amp;quot;pass&amp;quot;: &amp;quot;ComplexPwd&amp;quot;,
    &amp;quot;port&amp;quot;: &amp;quot;22&amp;quot;,
    &amp;quot;path&amp;quot;: &amp;quot;/root/jumper&amp;quot;,
    &amp;quot;upstream&amp;quot;: &amp;quot;jumper1&amp;quot;
  },
  &amp;quot;jumper3&amp;quot;: {
    &amp;quot;host&amp;quot;: &amp;quot;10.211.55.44&amp;quot;,
    &amp;quot;user&amp;quot;: &amp;quot;root&amp;quot;,
    &amp;quot;pass&amp;quot;: &amp;quot;ComplexPwd&amp;quot;,
    &amp;quot;port&amp;quot;: &amp;quot;22&amp;quot;,
    &amp;quot;path&amp;quot;: &amp;quot;/root/jumper&amp;quot;,
    &amp;quot;upstream&amp;quot;: &amp;quot;jumper2&amp;quot;
  },
  &amp;quot;web&amp;quot;: {
    &amp;quot;host&amp;quot;: &amp;quot;10.211.55.45&amp;quot;,
    &amp;quot;user&amp;quot;: &amp;quot;root&amp;quot;,
    &amp;quot;pass&amp;quot;: &amp;quot;ComplexPwd&amp;quot;,
    &amp;quot;port&amp;quot;: &amp;quot;22&amp;quot;,
    &amp;quot;path&amp;quot;: &amp;quot;/root/jumper&amp;quot;,
    &amp;quot;upstream&amp;quot;: &amp;quot;jumper3&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&#34;task-json-新任务&#34;&gt;task.json （新任务）&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;quot;status&amp;quot;: &amp;quot;&amp;quot;,
  &amp;quot;file&amp;quot;: &amp;quot;dm.zip&amp;quot;,
  &amp;quot;position&amp;quot;: &amp;quot;&amp;quot;,
  &amp;quot;id&amp;quot;: &amp;quot;&amp;quot;,
  &amp;quot;target&amp;quot;: &amp;quot;web&amp;quot;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&#34;task-json-任务完成&#34;&gt;task.json （任务完成）&lt;/h3&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;quot;status&amp;quot;: &amp;quot;finished&amp;quot;,
  &amp;quot;log&amp;quot;: [
    {
      &amp;quot;host&amp;quot;: &amp;quot;jumper1&amp;quot;,
      &amp;quot;hash&amp;quot;: &amp;quot;55292b6922f34fc1e56b876e8e4dbb5d&amp;quot;,
      &amp;quot;time&amp;quot;: &amp;quot;2016-02-23 15:39:08&amp;quot;
    },
    {
      &amp;quot;host&amp;quot;: &amp;quot;jumper2&amp;quot;,
      &amp;quot;hash&amp;quot;: &amp;quot;55292b6922f34fc1e56b876e8e4dbb5d&amp;quot;,
      &amp;quot;time&amp;quot;: &amp;quot;2016-02-23 15:39:39&amp;quot;
    },
    {
      &amp;quot;host&amp;quot;: &amp;quot;jumper3&amp;quot;,
      &amp;quot;hash&amp;quot;: &amp;quot;55292b6922f34fc1e56b876e8e4dbb5d&amp;quot;,
      &amp;quot;time&amp;quot;: &amp;quot;2016-02-23 15:39:56&amp;quot;
    }
  ],
  &amp;quot;file&amp;quot;: &amp;quot;dm.zip&amp;quot;,
  &amp;quot;position&amp;quot;: &amp;quot;web&amp;quot;,
  &amp;quot;id&amp;quot;: &amp;quot;86086b9eda0011e5a310001c4268d82a&amp;quot;,
  &amp;quot;target&amp;quot;: &amp;quot;web&amp;quot;
}

&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
  </channel>
</rss>
