ブログ

読んで思い出す。忘れるために書く

リモートサーバから curl でテキストファイルの内容を受け取る (Sinatra, ngrok)

(たぶん Sinatra 側のコードをバイナリファイル書き込み対応させれば テキストファイル以外も取得できる)

前提・状況

  • SSH が使えない (認証情報を知らない etc...)
  • 何らかの方法で「黒い画面」が使えてリモートサーバにアクセスできる
  • リモートサーバで curl が動く
  • リモートサーバは任意の通信が許可されている (Firewall などガチガチじゃない)
  • 手元の環境で Ruby が使える
  • 手元の環境で ngrok が使える

準備

手元の環境で、cURL 経由で渡されたデータを表示させるプログラムを作る

require 'sinatra'

post '/' do
  # data をキー値にリモートから渡されたデータは
  # Tempfile クラス インスタンスに実データが格納される
  puts params['data']['tempfile'].read # 送られてきた情報を標準出力で表示
end

Sinatra を起動させ、ngrok で外部からアクセス可能な状態にする

# Sinatra が専有するポート番号に ngrok の接続ポート番号を合わせる
ruby server.rb # => Port : 4567
ngrok http  4567
# => http://xxxxxxxx.ngrok.io

テキストファイルの送信

リモートサーバから curl を使ってテキストファイルを送信する

curl -F 'data=@/where/to/text/file.txt` http://xxxxxxxx.ngrok.io

手元の Sinatra サーバのログ情報に混じって、リモートサーバから送られてきたテキストファイルの中身の情報が出力される

Links