pentaho/pentaho-kettle · error · KettleException
JobSFTPPUT.Error.CanNotFindRemoteFolder
JobSFTPPUT.Error.CanNotFindRemoteFolder
Error message
JobSFTPPUT.Error.CanNotFindRemoteFolder
What it means
During execution of the SFTP PUT job entry, the target remote directory (realSftpDirString) does not exist on the SFTP server and createRemoteFolder is disabled, so the entry aborts with this localized error instead of creating the folder. It is a pre-flight validation of the remote destination.
Solutions
- Enable 'Create remote folder' (createRemoteFolder) on the job entry
- Correct the destination SFTP directory path in the job entry settings
- Create the folder manually on the SFTP server or have an earlier job entry create it
- Verify the SFTP user has permission to see/create the folder
Example fix
// before (entry config XML) <createRemoteFolder>N</createRemoteFolder> // after <createRemoteFolder>Y</createRemoteFolder>
Defensive patterns
Strategy: validation
Validate before calling
// Java — before executing the entry
SFTPClient client = new SFTPClient( ... );
client.connect( host, port, user, pass );
boolean ok = client.folderExists( remoteDir );
if ( !ok && !createRemoteFolder ) {
throw new IllegalStateException( "Remote folder missing and createRemoteFolder is off: " + remoteDir );
} Try / catch
try {
jobEntry.execute( result, nr );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "CanNotFindRemoteFolder" ) ) {
logError( "Create the remote folder or enable createRemoteFolder" );
}
result.setResult( false );
} Prevention
- Enable 'Create remote folder' for idempotent jobs
- Validate remote paths with a dry-run connection at design time
- Use variables/env checks to confirm the SFTP directory value resolves
When it happens
Trigger: sftpclient.folderExists(realSftpDirString) returns false while isCreateRemoteFolder() is false, immediately before moving to the remote spool directory to upload files.
Common situations: Typo in the remote folder path; folder removed on the server between runs; 'Create remote folder' checkbox left unchecked in the SFTP PUT dialog; wrong user home directory on the SFTP server.
Related errors
- Unable to load job entry of type 'SFTPPUT' from the…
- Unable to load job entry of type 'SFTPPUT' from XML node
- An unexpected error has occurred
- Could not execute specified in a repository since we're not…
- Could not get the groups of the current user (error code: )
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/f6861758b38fbdf2.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/put-file-sftp/impl/src/main/java/org/pentaho/di/job/entries/sftpput/JobEntrySFTPPUT.java:809
String realProxyHost = environmentSubstitute( getProxyHost() );
if ( !Utils.isEmpty( realProxyHost ) ) {
// Set proxy
sftpclient.setProxy(
realProxyHost, environmentSubstitute( getProxyPort() ), environmentSubstitute( getProxyUsername() ),
environmentSubstitute( getProxyPassword() ), getProxyType() );
}
// login to ftp host ...
sftpclient.login( realPassword );
// Don't show the password in the logs, it's not good for security audits
// logDetailed("logged in using password "+realPassword); // Logging this seems a bad idea! Oh well.
// move to spool dir ...
if ( !Utils.isEmpty( realSftpDirString ) ) {
boolean existfolder = sftpclient.folderExists( realSftpDirString );
if ( !existfolder ) {
if ( !isCreateRemoteFolder() ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobSFTPPUT.Error.CanNotFindRemoteFolder", realSftpDirString ) );
}
if ( log.isDetailed() ) {
logDetailed( BaseMessages
.getString( PKG, "JobSFTPPUT.Error.CanNotFindRemoteFolder", realSftpDirString ) );
}
// Let's create folder
sftpclient.createFolder( realSftpDirString );
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "JobSFTPPUT.Log.RemoteFolderCreated", realSftpDirString ) );
}
}
sftpclient.chdir( realSftpDirString );
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "JobSFTPPUT.Log.ChangedDirectory", realSftpDirString ) );
}
} // end ifView on GitHub (pinned to f3058517a1)