ruby sftp

Rubyを使ってSFTPサーバーに接続する

ruby sftp

こんにちは、EC事業部CREチームのsymmondsです。

CSVファイルの転送が必要なサービスに携わることになり、そこで転送先のSFTPサーバーに接続することが求められたので、その実装を担当することになりました。また、SFTPサーバーの接続にはプロキシを経由する必要がありました。 そのサービスでは、バックエンドにはRuby on Railsが採用されていたため、今回の開発する機能もRubyを使うことにしました。

この業務を通して、以下のような知見を得ることができました。

  • Rubyのnet-sftpライブラリの使い方
  • SFTPの概要

本記事では上記の知見を実際の実装例を交えながら紹介し、Rubyを使用してSFTPサーバーに接続する方法を紹介します。

SFTPサーバーとは

SFTPはSSH File Transfer Protocolの略です。 セキュアなファイル転送を行うためのファイル転送プロトコルであり、通信をSSH(Secure Shell)で暗号化します。これにより、データの送受信が安全に行えます。FTPと同様の機能を提供しますが、よりセキュアな通信が可能です。

SFTPサーバーに接続する

使用したライブラリ

Rubyのnet-sftpライブラリを使ってSFTPサーバーに接続します。

今回はv4.0.0を使用します。

実装の下準備

実装の前にこれらの情報を集めておきます。実装段階で必要な情報なので事前に調べておくと実装が円滑に進行できます。

  • SFTPサーバーに接続するためのユーザー情報
  • SFTPサーバーのホスト名
  • 接続ポート
  • プロキシを経由する必要があれば、プロキシのホスト名

実装

実装はシンプルで以下のように記述します。portやpassword情報が必要であれば、引数に値を渡してあげてください。

# SFTPサーバーに接続する
Net::SFTP.start('host', 'username', port: port, password: 'password')

net-sftpを使用すると、これだけのコードで簡単にSFTPサーバーに接続できます。また、stateメソッドを使用することで、接続の状態を確認できます。

# 接続の状態を確認する
Net::SFTP.start('host', 'username', port: port, password: 'password') do |sftp|
  p sftp.state # => :open
end

openが返ってこれば接続成功です。他にも様々なメソッドが用意されているので興味がある方はぜひ調べてみてください。

プロキシを経由する場合

net-sshライブラリを使ってプロキシを設定します。上記で記述したものに引数が一つ増えるだけで基本的には同じ書き方です。

今回はv7.2.0を使用します。

以下は、プロキシを経由する実装例です。

# プロキシの設定
proxy = Net::SSH::Proxy::HTTP.new('proxy_host', 8080, user: 'proxy_user', password: 'proxy_password')
Net::SFTP.start('host', 'username', port: port, password: 'password', proxy: proxy) do |sftp|
  p sftp.state # => :open
end

stateメソッドで確認してopenが返ってこれば成功です。

最後に

Rubyを使ってSFTPサーバーに接続する方法の紹介でした。Rubyのnet-sftpライブラリを活用することで、簡単に実装することができました。実装を始めるまではSFTPについて知らなかったので、接続する方法を調べながらSFTPについて知れる良い機会でした。SFTPはデータを安全に送信するためのプロトコルとして広く利用されています。重要なデータが含まれているファイルをやり取りする際に使われることもあります。このことから、これからもSFTPに触れる可能性はあるので、より一層知識を深めていきたいと思います。

最後までお読みいただきありがとうございました!