メインコンテンツ

sftp

SFTP サーバーのファイルにアクセスするための接続

R2021b 以降

説明

SFTP 接続オブジェクトを生成する関数 sftp を呼び出して、SFTP サーバーに接続します。サーバー上の特定の SFTP アカウントにアクセスするには、ホストとユーザーを指定します。次に、SFTP オブジェクトを使用して、ファイルをアップロード、ダウンロード、および削除します。サーバー上で異なるフォルダーの作成、削除、およびそのフォルダーへの移動もできます。接続を閉じるには、関数 close を使用します。

SFTP は安全なプロトコルであるため、SFTP オブジェクトでは、ユーザー名、パスワード、および SFTP サーバーとの間でダウンロードまたはアップロードされるすべてのデータが暗号化されます。

作成

説明

s = sftp(host,user) は、user と SFTP サーバー host 間の接続を開き、SFTP 接続オブジェクトを返します。SSH キーは既定の場所から取得されます。

s = sftp(host,user,"PublicKeyFile",publickeyfile,"PrivateKeyFile",privatekeyfile) は、指定された場所にあるキー ファイルを使用します。

s = sftp(host,user,"Password",password) では、指定したパスワードが使用されます。

s = sftp(___,Name,Value) は、前述の構文の入力引数の任意の組み合わせに加え、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、"ServerSystem" の値に "Windows" を指定して、Windows® オペレーティング システムで実行される SFTP サーバーに接続できます。

入力引数

すべて展開する

SFTP サーバーのホスト名。string スカラーまたは文字ベクトルとして指定します。

SFTP サーバーの既定のポート番号は 22 です。接続の代替ポート番号を指定するには、host にコロン (:) とポート番号を追加します。

通常、サーバーのホスト名は "sftp.example.com" のように "sftp" で始まります。ただし、この方式は慣習であり、技術上の要件ではありません。たとえば、s = sftp("www.example.com:22") は、サーバー www.example.com が SFTP サービスを提供するように構成されていれば、ポート番号 22 への匿名接続を開きます。

構成データをハード コーディングする代わりに、この機密情報を MATLAB® Vault または .env ファイルに格納して取得できます。詳細については、Keep Sensitive Information Out of Codeを参照してください。

例: s = sftp("sftp.example.com").

SFTP サーバー上の承認済みアカウントの名前。string スカラーまたは文字ベクトルとして指定します。SFTP オブジェクトは user をプレーン テキストとして送信します。

指定したアカウントのパスワード。string スカラーまたは文字ベクトルとして指定します。SFTP オブジェクトは password を暗号化テキストとして送信します。

セキュリティを強化するために、パスワードなどの機密情報はハードコーディングしないでください。詳細については、Keep Sensitive Information Out of Codeを参照してください。

例: "Password","PaSsWoRd123"

SFTP 認証用の公開鍵ファイル。string スカラーまたは文字ベクトルとして指定します。公開鍵ファイルの既定の場所は、オペレーティング システムによって異なります。

  • Linux および MacOS では、公開鍵ファイルの既定の場所は $HOME/.ssh/id_rsa.pub です。

  • Windows では、公開鍵ファイルの既定の場所は %USERPROFILE%\.ssh\id_rsa.pub です。

例: "PublicKeyFile","/Users/abc/sshKeys/keys.pub"

SFTP 認証用の秘密鍵ファイル。string スカラーまたは文字ベクトルとして指定します。秘密鍵ファイルの既定の場所は、オペレーティング システムによって異なります。

  • Linux および MacOS では、秘密鍵ファイルの既定の場所は $HOME/.ssh/id_rsa です。

  • Windows では、秘密鍵ファイルの既定の場所は %USERPROFILE%\.ssh\id_rsa です。

例: "PrivateKeyFile","/Users/abc/sshKeys/keys"

名前と値の引数

すべて展開する

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: s = sftp(host,user,ServerSystem="Windows")

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: s = sftp(host,user,"ServerSystem","Windows")

dir 出力日付フィールドで使用する型。"datetime" または "text" として指定します。

R2024a 以降

ログイン時にリモートの現在の作業フォルダーとして使用するフォルダー。string スカラーまたは文字ベクトルとして指定します。

例: StartingFolder="home/jsmith/birds"

SFTP サーバー上で実行しているオペレーティング システムのタイプ。"unix" または "Windows" として指定します。

リモート サーバーから日付を読み取るロケール。string スカラーまたは文字ベクトルとして指定します。

ServerLocale の値は、xx_YY の形式の文字ベクトルまたは string スカラーにすることができます。xx は ISO 639-1 で定義された小文字 2 文字の言語コードで、YY は ISO 3166-1 alpha-2 で定義された大文字の国コードです。

次の表に一般的なロケールの値を示します。

ロケール 言語
"de_DE"ドイツ語ドイツ
"en_GB"英語英国
"en_US"英語米国
"es_ES"スペイン語スペイン
"fr_FR"フランス語フランス
"it_IT"イタリア語イタリア
"ja_JP"日本語日本
"ko_KR"韓国語韓国
"nl_NL"オランダ語オランダ
"zh_CN"簡体字中国語中国

FTP サーバーの LIST コマンド出力の解析方法。関数ハンドルとして指定します。既定値は、サーバーのオペレーティング システムに応じて @matlab.io.ftp.parseDirListingForUnix または @matlab.io.ftp.parseDirListingForWindows のいずれかになります。

カスタム関数ハンドルも指定できます。カスタム関数ハンドルには 3 つの入力が必要です。

  1. ディレクトリ要素のリスト。string ベクトルとして指定します。

  2. サーバーのロケール。string スカラーとして指定します。

  3. 日付と時刻のデータのデータ型。"datetime" または "text" として指定します。

カスタム関数ハンドルの出力は、m 行 1 列のサイズの構造体配列でなければなりません。m はフォルダー内の項目数です。構造体のフィールドは、関数 dir で返される構造体のフィールドと同じ nameisdirbytesdatedatenum でなければなりません。これらのフィールドの詳細については、関数 dir のリファレンス ページを参照してください。

この名前と値の引数は、既定値ではエラーになり、dir の出力を解析できない場合に指定します。dir を参照するオブジェクト関数を使用するように、この引数を正しく指定する必要があります。

関数シグネチャ

カスタム書き込み関数は、ディレクトリ要素のリスト entries、サーバーのロケール serverLocale、および日付と時刻のデータのデータ型 datetimeType の 3 つの入力引数を受け入れなければなりません。

function listing = myFormatFcn(entries,serverLocale,datetimeType)

関数の例

textscan への入力となる要素を cell 配列に結合します。struct を事前に割り当てます。textscan 出力から個々の部分を取得します。該当するフィールドへの入力を行う struct を作成します。

function listing = myFormatFcn(entries,serverLocale,datetimeType)
    entries = join(entries,newline);
    out = textscan(entries,"%s%d%3c%d%s","MultipleDelimsAsOne",true);
    structSize = numel(out{1});
    listing = struct("name",cell(structSize,1),"isdir",zeros(1,1), ...
        "bytes",zeros(1,1),"date",'',"datenum",zeros(1,1));
    monthName = string(out{3});
    day = string(out{4});
    time = string(out{5});
    names = out{1};
    bytes = out{2};
    for ii = 1 : structSize
        listing(ii).name = names{ii};
        listing(ii).isdir = false;
        listing(ii).bytes = bytes(ii);
        makeDate = day(ii) + "-" + monthName(ii) + " " + ...
            time(ii);
        thisDate = datetime(makeDate,"InputFormat","dd-MMM HH:mm", ...
            "Locale",serverLocale);
        if datetimeType == "text"
            listing(ii).date = datestr(thisDate);
        else
            listing(ii).date = thisDate;
        end
        listing(ii).datenum = datenum(thisDate);    
    end
end

R2024b 以降

接続の最大許容時間。duration スカラーとして指定します。既定では、接続は 300 秒後に終了します。

R2024b 以降

転送の最大許容時間。duration スカラーとして指定します。値を指定しない場合、SFTP 転送はタイムアウトしません。

R2024b 以降

秘密鍵のパスフレーズ。string スカラーまたは文字ベクトルとして指定します。

R2024b 以降

証明書ファイル名。"default"、ルート証明書を含むファイルの名前と場所を示す string スカラーまたは文字ベクトルとして指定します。このファイルは、ヘッダー -----BEGIN CERTIFICATE----- とフッター -----END CERTIFICATE----- を含む Privacy-Enhanced Mail (PEM) 形式でなければなりません。

証明書ファイルの場所は、現在のフォルダー内または MATLAB パス上のフォルダー内でなければなりません。証明書ファイルへの絶対パスまたは相対パスを指定できます。MATLAB は、このファイルに含まれる証明書を使用して、HTTPS 接続用のサーバー証明書を検証します。HTTPS 接続のセキュリティはこのファイルの整合性に依存するため、このファイルを適切に保護してください。MATLAB は証明書または証明書ファイルを管理しませんが、PEM ファイルを管理するためにサードパーティ製のツールを使用できます。

CertificateFilename"default" の場合、MATLAB はシステムによって提供された証明書ストアを使用してサーバー証明書を検証します。サーバー証明書の検証が失敗する場合、システム ブラウザーを使用して接続をチェックしてください。

接続の問題が発生した場合、次のいずれかのアクションを実行できます。

  • サーバー証明書の期限が切れているか取り消されている場合、Web サイトの所有者またはサーバー管理者に連絡してください。

  • ルート認証機関 (ルート CA) の証明書がない場合、CertificateFilename で示されたファイルにルート CA 証明書を追加してください。

オブジェクト関数

cdSFTP または FTP サーバー上の現在のフォルダーの変更または表示
closeSFTP または FTP サーバーへの接続を閉じる
deleteSFTP または FTP サーバー上にあるファイルの削除
dirSFTP または FTP サーバー上のフォルダーの内容の一覧表示
mgetSFTP または FTP サーバーからのファイルのダウンロード
mkdirSFTP または FTP サーバーでの新規フォルダーの作成
mputSFTP または FTP サーバーへのファイルまたはフォルダーのアップロード
renameSFTP または FTP サーバー上にあるファイルの名前の変更
rmdirSFTP または FTP サーバー上のフォルダーの削除

すべて折りたたむ

サンプルの SFTP サーバーに接続します。

s = sftp("sftp.example.net","jsmith")
  SFTP with properties:

                         Host: "sftp.example.net"
                     Username: "jsmith"
                         Port: 22
                 ServerSystem: "Windows"
                 DatetimeType: "datetime"
                 ServerLocale: "en_US"
                 DirParserFcn: @matlab.io.ftp.parseDirListingForWindows
       RemoteWorkingDirectory: "/home/jsmith"

SFTP オブジェクトを作成して SFTP サーバーへの接続を開きます。SFTP オブジェクトを使用して、ファイルをダウンロードし、サーバー上のサブフォルダーの内容をリストします。SFTP セッションの終了時に、接続を閉じます。

最初に、サンプルの SFTP サーバーに接続します。

s = sftp("sftp.example_galapagos.net","jsmith","Password","PaSsWoRd123")
  SFTP with properties:

                         Host: "sftp.example_galapagos.net"
                     Username: "jsmith"
                         Port: 22
                 ServerSystem: "unix"
                 DatetimeType: "datetime"
                 ServerLocale: "en_US"
                 DirParserFcn: @matlab.io.ftp.parseDirListingForUnix
       RemoteWorkingDirectory: "/home/jsmith"

最上位フォルダーの内容をリストします。

dir(s)
 
air_quality                  fish                        insects                       README.txt
birds                        INDEX.txt                   mammals                       reptiles
climate                      index.html                  rainfall                      sftp.html
 

SFTP サーバーからファイル README.txt をダウンロードします。関数 mget は、現在の MATLAB® フォルダーにコピーをダウンロードします。

mget(s,"README.txt");

関数 readlines を使用して、README.txt のコピーの内容を読み取ります。最初の 3 行を表示します。

readme = readlines("README.txt");
readme(1:3)
ans = 4×1 string
    "                 Welcome to the "
    "    Galapagos Research Institute Data Center "
    "                    SFTP area"

関数 dir を使用してサブフォルダーの内容をリストします。

dir(s,"home/jsmith/birds")
 
albatrosses                 ducks                       herons                     parrots 
avocets_stilts              falcons                     kingfishers                pelicans
barn_owls                   flamingos                   mockingbirds               penguins 
blackbirds                  frigatebirds                nightjars                  pheasants 
boobies                     grebes                      northern_storm_petrels     pigeons 
cardinal grosbeaks          guineafowl                  osprey                     plovers 
cormorants                  gulls                       owls                       rails
cuckoos                     hawks                       oystercatcher              sandpipers
 

関数 cd を使用してサブフォルダーを変更します。cd からの出力は、現在の MATLAB フォルダーではなく、SFTP サーバー上の現在のフォルダーへのパスです。

cd(s,"home/jsmith/birds/herons")
ans = 
"home/jsmith/birds/herons"

現在のフォルダーの内容をリストします。

dir(s)
documentation             great_egret_data              migration_patterns
great_blue_heron_data     green_heron_data              nesting_behaviors 

SFTP サーバーへの接続を閉じます。SFTP オブジェクトを削除するか、接続をタイムアウトさせても接続を閉じることができます。

close(s)

サンプルの SFTP サーバーに接続します。サーバーのロケールを英国と指定します。名前と値の引数 "DirParserFcn" を使用して、SFTP サーバーの LIST コマンド出力を Windows について解析するように指定します。

s = sftp("sftp.example_london.net","jsmith","Password",...
"PaSsWoRd123","ServerLocale","en_GB","DirParserFcn",... 
@matlab.io.ftp.parseDirListingForWindows)
  SFTP with properties:

                         Host: "sftp.example_london.net"
                     Username: "jsmith"
                         Port: 22
                 ServerSystem: "Windows"
                 DatetimeType: "datetime"
                 ServerLocale: "en_GB"
                 DirParserFcn: @matlab.io.ftp.parseDirListingForWindows
       RemoteWorkingDirectory: "/home/jsmith"

サンプルの SFTP サーバーに接続します。日付をテキストとして返すように SFTP オブジェクトに指示します。

s = sftp("sftp.example.net","jsmith","DatetimeType","text")
  SFTP with properties:

                         Host: "sftp.example.net"
                     Username: "jsmith"
                         Port: 22
                 ServerSystem: "Windows"
                 DatetimeType: "text"
                 ServerLocale: "en_US"
                 DirParserFcn: @matlab.io.ftp.parseDirListingForWindows
       RemoteWorkingDirectory: "/home/jsmith"

dir 出力の日付プロパティを表示します。

d = dir(s);
d.date
ans =

    '03-Dec-2015'

制限

  • SFTP オブジェクトはプロキシ サーバー設定をサポートしていません。

バージョン履歴

R2021b で導入

すべて展開する