gerry++
接続済み SSH セッションからファイルをダウンロードする
別のコンピュータから手元のコンピュータへファイルを転送するというニーズはいつの時代でもあるもので、それは現代においても同じです。しかしどんなに文明が進んだとしても、そう簡単には解決しない問題も同時にあり続けます。
通常、SSH で接続できるコンピュータであれば、scp を使えば特に何も考えず、鼻クソをほじりながら、あるいは便器に座りケツニューロリンカーをバーストリンクしている状態であっても、ファイルを転送することは簡単にできます。
しかし、非常に限定されたケースであるとはいえ、踏み台にするサーバやシステム構成上、すんなりと SSH 接続を確立できないホストがあることも事実です。そこに接続してシェルを操作することはできる、でもファイルを手元に持ってくることが難しい。そんなジレンマが僕らの前に立ちはだかるわけです。
この問題について、定期的に悩んでは「そんなに量もないし、コピペして繋ぎあわせよう」だとか「既に立ってる HTTPD でプロキシ経由でとってこよう」とか、なかなかスマートとは言いがたい解決をしてきましたが、この度ようやく解決できそうだというところまできたので書き記すことにします。
ttyrec -u を使う
https://twitter.com/kzys/status/220113051536461824 で教えてもらったのですが、ttyrec には uuencode された文字列を検出して手元に書きこみ機能があり、ttyrec -u で新しいシェルを起動して、その中で SSH 接続を確立し、uuencode を実行することでファイルを転送することができます。
これは事前に ttyrec 経由で SSH のプロセスを立ち上げる必要があるので「接続済み SSH セッションからファイルをダウンロードする」方法とは言えませんが、何らかの理由があって簡単に接続を確立できないホストなら、手軽にファイルを転送できて便利そうです。
screen を使う
ttyrec -u でもいいのですが、やはり「接続済み SSH セッションからファイルをダウンロードする」方法が欲しいと思い、screen の log 機能を使って ttyrec -u 相当のこと (すなわち uuencode された文字列を検出して、手元に書きこみ) をしようと思いました。普段から手元で screen を起動しているなら、それを使えばいいだけでした。
$ uutransfer 1
のように起動します。引数は screen におけるウィンドウ番号です。ここではウィンドウ番号 1 に接続済みの SSH セッションがあるという前提です。
起動すると
Waiting for log... Watching window 1
とメッセージが起動したウィンドウに出ると同時に、ウィンドウが 1 に切り替わります (つまりメッセージは見えません)。ウィンドウ1はログを保存するモードになるので、ウィンドウステータスに (L) がつきます。
この状態で、ウィンドウ1 で
$ uuencode foo.txt foo.txt
とすると、手元に foo.txt がダウンロードされ、screen に '/Users/cho45/foo.txt was created. md5: bd5ce86cd3e2473bf32bcb5e2a824453' といった感じのメッセージが echo されます。
起動したウィンドウに戻るとこんな感じのメッセージがでています。
foo.txt: Detect uuencoded file... foo.txt: Writing... 803 bytes foo.txt: Done /Users/cho45/foo.txt 580 bytes bd5ce86cd3e2473bf32bcb5e2a824453
Ctrl-C で止めるまで動き続けるので、終わったら Ctrl-C をして止めます。止めると、screen 側のログを保存するモードも終了します。
おまけ
uuencode が意外にシステムに入っていなくてダルい
ruby -e 'puts "begin 666 #{File.basename(ARGV[0])}\n#{[File.read(ARGV[0])].pack("u")}`\nend"' fileperl -MPath::Class -e 'my $file=file(shift);printf("begin 666 %s\n%s`\nend\n",$file->basename,pack("u",scalar $file->slurp))' file✖
✖
関連エントリー
- ✖ いなり、こんこん、恋いろは。 (5) (カドカワコミックス・エース) cho45 よしだ もろへ ★ 5.0 / 5.0 cho45 あっと...
- 最近買った漫画 いなり、こんこん、恋いろは。 (3) (角川コミックス・エース 326-3) cho45 よしだ もろへ ★ 3.0 / 5.0 cho45...
- 今年やったことを自分で承認する 日記を読みかえしてみたら今年もいろいろやっていた。年末にせめて自分で自分を承認してあげたい。おおまかには 高周波関係 アンテナアナライザ製作...
- ✖ 自分で撮った古い写真を4K画面でだらだら眺めてると面白くて、歴史を感じる。 HT-03A の写真が1枚だけあって、解像度低すぎてビビる。でも...
- 中華 40M CW TRX 7.023-7.026MHz QRP Pixie ebay で売ってる「40M CW Transmitter Receiver 7.023-7.026MHz QRP Pixie KITS」と...
✖
✖
✖
ちょっと高いけどこれを買ってみた。ダイヤル式でセットしやすいけど、手にもってセットするというより、磁石でちょうどいい高さのはっつけてそのまま回すのが快適
関連エントリー
- ケーブルボックスを統一した しばらく(2年ぐらい?)ELECOMの難燃のケーブルボックスを使ってみた使い勝手がよかったので、うちで使ってるものをこれに統一したり、使って...
- 3Dプリンタ用のエンクロージャをつくった Original Prusa i3 MK2S 用のエンクロージャをつくっていた。ひとまず形にはなった。 目的 最大の目的は ABS をプリン...
- 3Dプリンタのプラットフォームシートのはりかえ Original Prusa MK3 のプラットフォーム(磁石でつけるシート型)には両面PEIフィルムが貼ってあるのだが、片方のフィルムが破...
- マリオカート7 マリオカート7 - 3DS cho45 任天堂 ★ 5.0 / 5.0 cho45 マリオカート7を買った。3DS を購入したのがそもそもマ...
- スケートボードカバー スケボーバッグを買ったはいいが、そのまま入れるとデッキテープと擦れてすぐダメになりそうだったので、カバーをつくった。袋状だと出し入れがダルい...
✖
gerry++
Lion の DBD::mysql
mysql 公式パッケージの DMG を入れると、/usr/local/mysql* にインストールされる。めんどいので system 側から symlink をはる。
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/
あとなんか Makefile.PL 実行時に grant しろって言われるやつそのままやってもダメなことがあるけど適当にやるしかない。
谷保天満宮
✖
✖
gerry++
✖
✖
✖
Excel が自動認識するファイルフォーマット
「UTF-16LE BOM付き タブ区切り」で出力すれば認識される (Microsoft Excel 2008 for Mac でのみ確認)
花火
git pull したあとどのファイルが変更されたのか表示する
デフォルトだと
git config --get merge.stat
が true なので表示されるが (表示されるのは git diff --stat ORIG_HEAD 相当)、
git config --local --get branch.master.rebase
が true に設定されていたり(git config --get branch.autosetuprebase が always だったりすると設定される)、 git pull --rebase とした場合、merge ではなく rebase になるため表示されず悲しい。これは
git config --get rebase.stat
が false by default だからで、true にセットしてやればいいようだ。
git config --global --add --bool rebase.stat true

















