ITエンジニアによるITエンジニアのためのブログ

Rubyでプロキシ経由SFTPファイルアップロード

ファイルアップロードサーバーが、セキュリティ対策としてIPアドレス制限をかけている場合、静的IPアドレスを持つアプリケーションであればホワイトリスト登録で解決できます。

しかし、Herokuのような動的IPアドレスを持つアプリケーションでは、ホワイトリスト登録が困難です。そこで、本記事では、Rubyを用いてプロキシサーバー経由でSFTPによってファイルをアップロードする方法を紹介します。

必要なライブラリのインストール

gem install net-ssh net-sftp

接続確認スクリプト

#!/bin/env ruby

# 必要なライブラリの読み込み
require 'net/ssh'
require 'net/sftp'
require 'net/ssh/proxy/http'

# プロキシサーバー情報
proxy_host = 'example.com'
proxy_port = 8080
proxy_username = 'proxy_user'
proxy_password = 'proxy_password'

# HTTPプロキシオブジェクトの作成
proxy = Net::SSH::Proxy::HTTP.new(proxy_host, proxy_port, user: proxy_username, password: proxy_password)

# SFTPサーバーへの接続
Net::SSH.start('sftp_server_name',
               'sftp_username',
               { port: 22,
                 proxy: proxy,
                 password: 'sftp_password' }) do |ssh|
  # SFTPセッションの確立
  ssh.sftp.connect do |sftp|
    sftp.dir.foreach("/") do |entry|
      puts entry.longname
    end
  end
end

解説

・上記のスクリプトは、SFTPサーバーに接続し、ルートディレクトリ内のファイルを一覧表示するものです。

・実際にファイルをアップロードするには、sftp.put()メソッドなどを利用します。

・プロキシサーバーの設定や認証情報は、ご自身の環境に合わせて変更してください。