Help us understand the problem. What is going on with this article?

名前付きPIPE + scriptコマンド + Python で base64結果をローカルに保存

More than 1 year has passed since last update.

名前付きPIPE + scriptコマンド + Python で base64結果をローカルに保存

by mandbjp505
1 / 20

目次

  • TL;DR
  • usage
  • 仕組み
    • 名前付きPIPE
    • script コマンド
    • snatch_base64.py 機能
  • 以上ですが、嘘かもしれない
  • 参考文献

GitHub

https://github.com/mandbjp/snatch_base64


TL;DR

  • なぜ作った?
    • 多段sshした先のファイルをscpで取ってくるのが大変だから、標準出力からファイルに落とせるようにした
  • 以下のようなコマンドを叩くとMac内にファイルを保存する
    • cat some_large_text.log | gzip | base64 -w0
    • cat some_archive.tar.gz | base64 -w0

usage

term1_ssh
> mkfifo -m 0777 fifo.pipe
> script -qF fifo.pipe
> 
term2_snatch_base64
> python snatch_base64.py

term1_ssh(cont.)
> ssh user@centos.somedomain.local
[centos]> cat some_large_text.log | gzip | base64 -w0
ASDF....==[centos]> 
> 
term2_snatch_base64(cont.)
start capture!!
gzip support
dumped!!

仕組み


名前付きPIPE


名前付きPIPEって?

  • 通常のPIPEは | で stdout -> stdin をつなぐ
  • 名前付きPIPEは mkfifo で作られたファイル越しに stdout -> stdin をつなぐ

名前付きPIPE 使い方

term1
> mkfifo -m 0777 my_fifo.pipe
> cat my_fifo.p
(ここで止まる)
term2
> echo "hello!" > my_fifo.pipe
> 
term1
> mkfifo -m 0777 my_fifo.pipe
> cat my_fifo.p
hello!
> 

名前付きPIPE 特徴

  • ターミナルが別でも伝搬可能
  • 実行ユーザーが別でも伝搬可能 -m 0777 オプション
  • 入出力が揃わないと開始しない
  • 名前付きPIPEへの出力 (term2) が終了すると、 名前付きPIPEからの入力 (term1) も終了する

script コマンド


script コマンド (Mac/FreeBSD系)

  • stdin/stdout を記録してくれる
  • -F : 名前付きPIPEへ出力する
  • -q : 開始/終了メッセージを表示しない

script使い方 (ターミナルをミラー化)

term1
> mkfifo -m 0777 my_fifo.pipe
> cat my_fifo.pipe
(待つ)
term2
> script -qF my_fifo.pipe
> (ここで何かを入力する)
term1
> mkfifo -m 0777 my_fifo.pipe
> cat my_fifo.pipe
(全く同じ挙動がここで見える)
  • ターミナルをリサイズして vim とかやると面白い

script 特徴

  • stdin/stdout 両方取れる
  • ただし、stdin/stdout の区別はできない

snatch_base64.py の機能


snatch_base64.py がやってること

  1. 名前付きPIPEをFileOpenする
  2. → ユーザーの入力も、コマンドの結果も読み取れる
  3. 改行区切りで入力を判定する
  4. (centos用) base64 -w0 の文字列が含まれるか
  5. (mac用) base64 -i - の文字列が含まれるか
  6. 含まれている場合、次の行をbase64入力として準備する
  7. 改行を見つけるまでメモリ上に貯め込む
  8. 改行されたら溜め込んだものを base64decode してファイル保存する

snatch_base64.py の強み

  • ローカルのstdin/stdoutしか見ないため、多段のsshにも対応
  • 先方サーバーにはツール等のインストールが不要
    • ただし base64コマンドが使えること
  • gzip 検出で保存時にgz展開
  • cat 検出でファイル名取得

以上ですが、間違ってるかもしれない

  • 本書の内容は短い経験的なことで書いてます
  • 正しくない情報が含まれてるかもしれません
  • 間違ってたらごめんなさい

reference


End of Slide

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away