{"record":{"id":"52a274b6af62ccdc","repo":"pentaho/pentaho-kettle","slug":"sshmeta-exception-unabletoreadstepinfo","errorCode":null,"errorMessage":"SSHMeta.Exception.UnableToReadStepInfo","messagePattern":"SSHMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/ssh/SSHMeta.java","lineNumber":423,"sourceCode":"      serverName = XMLHandler.getTagValue( stepnode, ATTR_SERVER_NAME );\n      userName = XMLHandler.getTagValue( stepnode, ATTR_USER_NAME );\n      password = Encr.decryptPasswordOptionallyEncrypted( XMLHandler.getTagValue( stepnode, ATTR_PASSWORD ) );\n\n      usePrivateKey = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, ATTR_USE_PRIVATE_KEY ) );\n      keyFileName = XMLHandler.getTagValue( stepnode, ATTR_KEY_FILE_NAME );\n      passPhrase =\n        Encr.decryptPasswordOptionallyEncrypted( XMLHandler.getTagValue( stepnode, ATTR_PASS_PHRASE ) );\n      stdOutFieldName = XMLHandler.getTagValue( stepnode, ATTR_STD_OUT_FIELD_NAME );\n      stdErrFieldName = XMLHandler.getTagValue( stepnode, ATTR_STD_ERR_FIELD_NAME );\n      timeOut = XMLHandler.getTagValue( stepnode, ATTR_TIME_OUT );\n      proxyHost = XMLHandler.getTagValue( stepnode, ATTR_PROXY_HOST );\n      proxyPort = XMLHandler.getTagValue( stepnode, ATTR_PROXY_PORT );\n      proxyUsername = XMLHandler.getTagValue( stepnode, ATTR_PROXY_USERNAME );\n      proxyPassword =\n        Encr.decryptPasswordOptionallyEncrypted( XMLHandler.getTagValue( stepnode, ATTR_PROXY_PASSWORD ) );\n\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString( PKG, \"SSHMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId idStep, List<DatabaseMeta> databases )\n    throws KettleException {\n\n    try {\n      dynamicCommandField = rep.getStepAttributeBoolean( idStep, ATTR_DYNAMIC_COMMAND_FIELD );\n      command = rep.getStepAttributeString( idStep, ATTR_COMMAND );\n      commandfieldname = rep.getStepAttributeString( idStep, ATTR_COMMAND_FIELD_NAME );\n      serverName = rep.getStepAttributeString( idStep, ATTR_SERVER_NAME );\n      port = rep.getStepAttributeString( idStep, ATTR_PORT );\n      userName = rep.getStepAttributeString( idStep, ATTR_USER_NAME );\n      password = Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( idStep, ATTR_PASSWORD ) );\n\n      usePrivateKey = rep.getStepAttributeBoolean( idStep, ATTR_USE_PRIVATE_KEY );\n      keyFileName = rep.getStepAttributeString( idStep, ATTR_KEY_FILE_NAME );","sourceCodeStart":405,"sourceCodeEnd":441,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/ssh/SSHMeta.java#L405-L441","documentation":"SSHMeta.Exception.UnableToReadStepInfo is thrown when deserializing the SSH step's settings from transformation XML (loadXML -> readData). Any exception while reading XML tags (missing node, malformed XML, decrypt failure) is wrapped in a KettleXMLException with this message. It means the step definition stored in the .ktr file is unreadable.","triggerScenarios":"Loading a .ktr whose SSH step XML is malformed or missing expected tags, or Encr.decryptPasswordOptionallyEncrypted failing on a corrupted stored password.","commonSituations":"Hand-edited transformation files; files from incompatible Pentaho versions; truncated/corrupted XML transfer.","solutions":["Open the .ktr in Spoon to see whether it loads; re-save the step's settings","Diff the SSH step XML block against a known-good transformation","Restore the transformation from version control/backup","Inspect the wrapped cause for the specific XML parsing failure"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// validate the .ktr before use:\nxmllint --noout transformation.ktr && echo OK","typeGuard":null,"tryCatchPattern":"try {\n  transMeta = new TransMeta(ktrPath);\n} catch (KettleXMLException e) {\n  logError(\"Cannot read SSH step from XML: \" + e.getCause());\n  throw e;\n}","preventionTips":["Do not hand-edit .ktr files; use Spoon","Keep generator and consumer Pentaho versions aligned","Store transformations in version control for recovery"],"tags":["xml","serialization","metadata"],"backgroundTag":"schema-validation-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}