【发布时间】:2018-02-19 17:17:43
【问题描述】:
我目前正在利用 Apache Camel(撰写本文时为 2.20.2 版)作为更大 ETL 流程的一部分,将处理后的文件从 Camel 机器复制到另一台机器。
但是,我在处理 SCP 配置方面遇到了麻烦。这样做的目的是让我不必提供太多关于私钥所在位置和已知主机所在位置的信息。
以下是示例路线。示例路线仅用于交谈;它可能不准确,但这里的目的不是将上游部分显示为“工作”。由于我为它编写了 upstream 的测试,我确信文件生成部分正在工作。
什么有效:
如果我指定我的用户名和密码并且禁用严格的主机密钥检查,我的路由可以工作。
from("direct:init")
.to("file:///tmp")
.to("scp://my.server.local?username=makoto&password=XXXXXX" +
"&preferredAuthentications=password" +
"&strictHostKeyChecking=no");
当然,由于政策原因,没有严格的主机检查是绝对不行的。
什么不起作用:
-
如果我指定我的用户名和密码并不禁用严格的主机密钥检查,我会收到以下错误:
com.jcraft.jsch.JSchException: reject HostKey: my.server.local at com.jcraft.jsch.Session.checkHost(Session.java:789) ~[jsch-0.1.54.jar:na] at com.jcraft.jsch.Session.connect(Session.java:345) ~[jsch-0.1.54.jar:na] at org.apache.camel.component.scp.ScpOperations.createSession(ScpOperations.java:284) [camel-jsch-2.20.2.jar:2.20.2] at org.apache.camel.component.scp.ScpOperations.connect(ScpOperations.java:179) [camel-jsch-2.20.2.jar:2.20.2] 如果我指定了我的用户名和密码,请不禁用严格的主机密钥检查并不 将我的首选身份验证类型指定为“密码”,我得到与上述相同的错误。
-
如果我省略我的密码以支持指定我的私钥的路径,并且我禁用严格的主机密钥检查,我得到这个错误:
com.jcraft.jsch.JSchException: Auth cancel at com.jcraft.jsch.Session.connect(Session.java:518) ~[jsch-0.1.54.jar:na] at org.apache.camel.component.scp.ScpOperations.createSession(ScpOperations.java:284) [camel-jsch-2.20.2.jar:2.20.2] -
如果我执行上述所有操作并且将 publickey 作为我的首选身份验证,我会收到以下错误:
com.jcraft.jsch.JSchException: Auth fail at com.jcraft.jsch.Session.connect(Session.java:519) ~[jsch-0.1.54.jar:na] at org.apache.camel.component.scp.ScpOperations.createSession(ScpOperations.java:284) [camel-jsch-2.20.2.jar:2.20.2] at org.apache.camel.component.scp.ScpOperations.connect(ScpOperations.java:179) [camel-jsch-2.20.2.jar:2.20.2]在这种情况下,Camel 似乎完全无视我的用户,并选择使用自己的用户:
2018-02-19 10:46:15.142 DEBUG 23940 --- [obfuscated-route] o.a.camel.component.scp.ScpOperations : Passphrase for camel-jsch 2018-02-19 10:46:15.142 WARN 23940 --- [obfuscated-route] o.a.camel.component.scp.ScpOperations : Private Key authentication not supported 2018-02-19 10:46:15.142 DEBUG 23940 --- [obfuscated-route] o.a.camel.component.scp.ScpOperations : Passphrase for camel-jsch 2018-02-19 10:46:15.142 WARN 23940 --- [obfuscated-route] o.a.camel.component.scp.ScpOperations : Private Key authentication not supported
不用说,这里的错误消息并没有给我太多的东西,因为:
- 它们因情况而异
- 它们是特定于配置的;就好像每一个配置都缺少一些东西
考虑到这一点,配置它的正确方法是什么? Camel 邮件列表上的零散文档不会产生任何具体内容,the SCP documentation 对于这些情况几乎没有实际帮助。
其他一些需要注意的环境事项:
- 我既不“控制” Camel 所在的机器,也不“控制”接收文件的机器。
- 我正在我的机器上进行本地测试,我的公钥绝对包含在主机的 authorized_keys 文件中。
- 我机器上的 known_hosts 条目被散列/混淆。
【问题讨论】:
标签: java apache-camel jsch