SFTP セッションファクトリ
バージョン 3.0 の時点で、セッションはデフォルトでキャッシュされなくなりました。SFTP セッションキャッシングを参照してください。 |
SFTP アダプターを構成する前に、SFTP セッションファクトリを構成する必要があります。次の例に示すように、SFTP セッションファクトリを通常の Bean 定義で構成できます。
<beans:bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<beans:property name="host" value="localhost"/>
<beans:property name="privateKey" value="classpath:META-INF/keys/sftpTest"/>
<beans:property name="privateKeyPassphrase" value="springIntegration"/>
<beans:property name="port" value="22"/>
<beans:property name="user" value="kermit"/>
</beans:bean>
アダプターが SessionFactory
からセッションオブジェクトをリクエストするたびに、新しい SFTP セッションが作成されます。裏では、SFTP Session Factory は Apache MINA SSHD (英語) ライブラリに依存して SFTP 機能を提供します。
ただし、Spring Integration は SFTP セッションのキャッシュもサポートしています。詳細については、SFTP セッションキャッシングを参照してください。
DefaultSftpSessionFactory は、外部構成または拡張 SshClient を使用できます。例: org.eclipse.jgit:org.eclipse.jgit.ssh.apache ライブラリの org.eclipse.jgit.internal.transport.sshd.JGitSshClient 拡張を使用して、HTTP/SOCKS プロキシのサポートを提供できます。 |
この機能を使用する場合は、後で説明するように、操作の完了時に接続が物理的に閉じられないように、セッションファクトリをキャッシュセッションファクトリでラップする必要があります。 キャッシュがリセットされると、最後のチャネルが閉じられたときにのみセッションが切断されます。 新しい操作がセッションを取得したときに接続が切断されると、接続がリフレッシュされます。 |
あとは、この SFTP セッションファクトリをアダプターに挿入するだけです。
SFTP セッションファクトリに値を提供するより実用的な方法は、Spring のプロパティプレースホルダーサポートを使用することです。 |
バージョン 6.1.3 以降、DefaultSftpSessionFactory
にはカスタム SftpClient
をサポートする createSftpClient(…)
が導入されています。カスタム SftpClient
で createSftpChannelSubsystem()
メソッドをオーバーライドして、たとえば SFTP サブシステムのリクエストと応答用のカスタム RequestHandler
を追加する方法については、以下のサンプルを参照してください。
@Override
protected ChannelSubsystem createSftpChannelSubsystem(ClientSession clientSession) {
ChannelSubsystem sftpChannelSubsystem = super.createSftpChannelSubsystem(clientSession);
sftpChannelSubsystem.addRequestHandler((channel, request, wantReply, buffer) -> ...);
return sftpChannelSubsystem;
}
プロパティの構成
次のリストは、DefaultSftpSessionFactory
(Javadoc) によって公開されるすべてのプロパティを説明しています。
isSharedSession
(コンストラクター引数):: true
の場合、リクエストされたすべての SftpSession
インスタンスに対して単一の SftpClient
が使用されます。デフォルトは false
です。
sftpVersionSelector
::SFTP プロトコル選択用の SftpVersionSelector
インスタンス。デフォルトは SftpVersionSelector.CURRENT
です。
host
:: 接続先のホストの URL。必須。
hostConfig
:: ユーザー / ホスト / ポートオプションの代替としての org.apache.sshd.client.config.hosts.HostConfigEntry
インスタンス。プロキシジャンププロパティを使用して構成できます。
port
::SFTP 接続が確立されるポート。指定しない場合、この値はデフォルトで 22
になります。指定する場合、このプロパティは正数でなければなりません。
user
:: 使用するリモートユーザー。必須。
knownHostsResource
:: ホストキーリポジトリに使用される org.springframework.core.io.Resource
。リソースのコンテンツは、OpenSSH known_hosts
ファイルと同じ形式である必要があり、allowUnknownKeys
が false の場合は必須であり、事前に入力する必要があります。
password
:: リモートホストに対して認証するためのパスワード。パスワードが指定されていない場合は、privateKey
プロパティが必要です。
privateKey
:: リモートホストに対する認証に使用される秘密鍵の場所を表す org.springframework.core.io.Resource
。privateKey
が提供されていない場合は、password
プロパティが必要です。
privateKeyPassphrase
:: 秘密鍵のパスワード。userInfo
を設定すると、privateKeyPassphrase
は許可されません。パスフレーズはそのオブジェクトから取得されます。オプション。
timeout
:: timeout プロパティは、デフォルトの接続タイムアウトだけでなく、ソケットタイムアウトパラメーターとしても使用されます。デフォルトは 30 seconds
です。0
に設定すると、タイムアウトがないことを意味します。null
へ - 無限待機。
allowUnknownKeys
:: 不明な (または変更された) キーを持つホストへの接続を許可するには、true
に設定します。デフォルトは "false" です。false
の場合、事前設定された knownHosts
ファイルが必要です。
userInteraction
:: 認証中に使用されるカスタム org.apache.sshd.client.auth.keyboard.UserInteraction
。
バージョン 6.4 以降、DefaultSftpSessionFactory
は、内部 SshClient
をさらにカスタマイズするための Consumer<SshClient>
構成プロパティを公開します。例: クライアントの NIO ワーカーのデフォルト数とパケットサイズを変更する方法は次のとおりです。
sftpSessionFactory.setSshClientConfigurer((sshClient) -> {
sshClient.setNioWorkers(27);
PropertyResolverUtils.updateProperty(sshClient, CoreModuleProperties.MAX_PACKET_SIZE.getName(), 48 * 1024);
});