DT Blog

クレスコDTのエンジニアが
IT基礎知識から最新トレンドまで、技術ノウハウを発信

catch-img

インターネット接続不可な環境でも使えるPowerShellによるSFTPクライアント構築方法

こんにちは、クレスコ・デジタルテクノロジーズのM.Tです。
今回はインターネットに接続できないオフライン環境で、PowerShell Renci.Ssh.Net を用いて SFTP クライアントを構築した手順と、直面したエラー対応をご紹介します。
ネット上では、Visual Studio を利用した Renci.SshNet ライブラリの紹介記事を多く見かけます。
本記事では、そういった開発環境を使わずに構築したい方や、Add-Type 実行時の依存関係エラーでつまずいている方の参考になれば幸いです。

■あわせて読まれている資料:
対応事例やネットワークサービス一覧を掲載!
ネットワークテクノロジーサービス

目次[非表示]

  1. 1.Renci.SshNetライブラリについて
  2. 2.Renci.SshNetライブラリのインストール
  3. 3.SFTP通信を行うためのPowershellスクリプト例
  4. 4.まとめ
  5. 5.引用元

Renci.SshNetライブラリについて

Renci.SshNetライブラリは.NET向けのオープンソースSSHライブラリで、SSHプロトコルを使用した安全な通信を実装します。

  • 同期および非同期の両方を用いたSSHコマンドの実行
  • 同期および非同期操作の両方におけるSFTP機能
  • SCPの機能
  • リモート、動的およびローカルポートフォワーディング
  • インタラクティブシェル/ターミナル実装
  • 公開鍵、パスワード、キーボードによる相互方式による認証(マルチファクターを含む)
  • SOCKS4SOCKS5、またはHTTPプロキシによる接続


Renci.SshNetライブラリのインストール

Renci.SshNetライブラリのインストールはインターネット接続が可能な環境での作業となります。
まず初めに、Renci.SshNetライブラリをダウンロードする前にnuget.exeが必要となりますので以下URLからダウンロードします。

https://www.nuget.org/downloads

ダウンロード完了後、コマンドプロンプトを起動しnuget.exeをダウンロードしたフォルダ階層まで移動してから以下コマンドを実行します。(-versionオプションは指定しなくてもダウンロード可能)

nuget install SSH.NET -version 2025.0.0

コマンド実行後ダウンロード先に複数のフォルダが作成されます。



[SSH.NET]フォルダ内に製品ごとの[Renci.SshNet.dll]ファイルが存在しますのでこちらを用意します。

そのほかのフォルダは依存関係のあるdllファイルが含まれています。


SFTP通信を行うためのPowershellスクリプト例

ダウンロードしたRenci.SshNet.dllを使用したスクリプト例をインターネット上で検索すると、
以下のような内容が出てきます。ただ、上記の例を参考にスクリプトを実行しようとしたところ、早速以下のようなエラーメッセージが出てしまいました。



エラー内容にLoaderExceptionsプロパティを取得して詳細を確認するよう記載されているため、LoaderExceptionsプロパティを確認するために以下を実行します。



すると以下のような出力を得られました。



ここでメッセージを見ると、Renci.SshNetライブラリをインストールしたときに同時にインストールされた[Microsoft.Bcl.AsyncInterfaces]ファイルが見つからないとの内容になっています。[Microsoft.Bcl.AsyncInterfaces]には依存関係のあるdllファイルが含まれており、これを読み込んでいないから型を正しく読み込めなかったのでは、という推測が立ちました。
そのため、今度はAdd-Type -Path[Microsoft.Bcl.AsyncInterfaces.dll]ファイルを読み込みます。



また、先ほどと同じようなメッセージが出てしまったため、再度LoaderExceptionsプロパティを確認するためのコマンドを実行します。



すると今度は[System.Threading.Tasks.Extensions]ファイルが足りないとのエラーメッセージが出ました。
Renci.SshNetをダウンロードした際、依存関係のあるdllファイルが複数インストールされましたが、Renci.SshNet は複数の .NET ライブラリに依存しており、Add-Type DLL を読み込む際、参照先となる DLL が不足していると「型が見つからない」というエラーメッセージが発生します。
そのため、エラーメッセージに表示される DLL 名を手がかりに、不足している DLL を順に読み込む必要があります。
依存関係を解消するためにエラー文が出なくなるまで同じ作業を繰り返した結果、最終的にRenci.SshNet.dllを読み込めた時には以下のような状態となりました。



Renci.SshNet.dllを読み込めればあとはスクリプトの記載例を参考に進めていきます。
なお、パスワード認証ではなく公開鍵認証を使う場合は別途追加で他のdllファイルの読み込みが必要です。
公開鍵認証を使う場合は、Add-Typeで読み込みます。
もし型が読み込めないといったエラーが出た際には先ほどのエラー分析を実行していく必要があります。
以上の手順を実施することで、オフライン環境でも PowerShell を用いた SFTP クライアントを実装できます。


まとめ

本記事では、Renci.SshNet ライブラリの概要から、NuGet を利用した DLL の取得方法、そして PowerShell SFTP クライアントを構築する際に直面しがちな依存関係エラーの解消方法までを順に解説しました。Renci.SshNet に含まれる DLL は依存関係が多いため、Add-Type で読み込む際に「型が見つからない」といったエラーが発生する場合があります。その場合は、エラーメッセージに表示される型名を参考に、不足している DLL を確認してください。本記事が SFTP クライアント構築の参考になれば幸いです。

■サービス一覧はこちら↓


引用元

https://github.com/sshnet/SSH.NET

https://www.nuget.org/downloads

https://www.nuget.org/packages/SSH.NET

M.T
M.T
部署名:プロフェッショナルサービス5部

おすすめ資料はこちら

厳しい条件に縛られがちなネットワークのあり方に多角的な視点から最適解を提示します。
クラウドサービスやスマートデバイスの有効活用はもとより、「通話・会議・共有」といったコミュニケーション基盤の導入など、各システムに最適なネットワーク環境をご提案。
より高度化するIT利用に対応します。

CONTACT

社内システムのお悩みを私たちだけで解決へと導きます

お役立ち資料は
こちらから

不明な点はお気軽に
お問い合わせください