8

Oozie SSH 操作问题:

问题: 我们试图在集群的特定主机上运行一些命令。我们同样选择了 SSH Action。一段时间以来,我们一直面临这个 SSH 问题。这里的真正问题可能是什么?请指出我的解决方案。

日志:

AUTH_FAILED:无法执行操作 [ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=no -o StrictHostKeyChecking=no -o ConnectTimeout=20 USER@1.2.3.4 mkdir -p oozie-oozi/0000000-131008185935754-oozie-oozi-W /action1--ssh/ ] | ErrorStream:警告:将主机 1.2.3.4 (RSA) 永久添加到已知主机列表中。权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic、密码)。

org.apache.oozie.action.ActionExecutorException: AUTH_FAILED: 无法执行操作 [ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=no -o StrictHostKeyChecking=no -o ConnectTimeout=20 user@1.2.3.4 mkdir -p oozie-oozi /0000000-131008185935754-oozie-oozi-W/action1--ssh/ ] | ErrorStream:警告:将 1.2.3.4,192.168.34.208 (RSA) 永久添加到已知主机列表中。权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic、密码)。

at org.apache.oozie.action.ssh.SshActionExecutor.execute(SshActionExecutor.java:589)
at org.apache.oozie.action.ssh.SshActionExecutor.start(SshActionExecutor.java:204)
at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:211)
at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:59)
at org.apache.oozie.command.XCommand.call(XCommand.java:277)
at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:326)
at org.apache.oozie.service.CallableQueueService$CompositeCallable.call(CallableQueueService.java:255)
at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:175)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

原因:java.io.IOException: 无法执行操作 [ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=no -o StrictHostKeyChecking=no -o ConnectTimeout=20 user@1.2.3.4 mkdir -p oozie-oozi/0000000- 131008185935754-oozie-oozi-W/action1--ssh/ ] | ErrorStream:警告:将“1.2.3.4,1.2.3.4”(RSA)永久添加到已知主机列表中。权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic、密码)。

at org.apache.oozie.action.ssh.SshActionExecutor.executeCommand(SshActionExecutor.java:340)
at org.apache.oozie.action.ssh.SshActionExecutor.setupRemote(SshActionExecutor.java:373)
at org.apache.oozie.action.ssh.SshActionExecutor$1.call(SshActionExecutor.java:206)
at org.apache.oozie.action.ssh.SshActionExecutor$1.call(SshActionExecutor.java:204)
at org.apache.oozie.action.ssh.SshActionExecutor.execute(SshActionExecutor.java:547)
... 10 more

2013-10-09 12:48:25,982 警告 org.apache.oozie.command.wf.ActionStartXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[0000000-131008185935754-oozie-oozi-W@action1] 暂停工作流作业 id=0000000-131008185935754-oozie-oozi-W 2013-10-09 12:48:27,204 WARN org.apache.oozie.command.coord.CoordAction : USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[0000000-131008185935754-oozie-oozi-W@action1] E1100: 命令前置条件不成立执行,[,协调动作为空],错误代码:E1100 2013-10-09 12:59:57,477 INFO org.apache.oozie.command.wf.KillXCommand: USER[user] GROUP[-] TOKEN[] APP[测试] 作业 [0000000-131008185935754-oozie-oozi-W] 操作 [-] 已启动 WorkflowKillXCommand for jobId=0000000-131008185935754-oozie-oozi-W 2013-10-09 12:59:57,685 WARN org.apache.oozie.command.coord.CoordActionUpdateXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E1100: 命令前置条件在执行前不保持,[,坐标操作为空],错误代码:E1100 2013-10-09 12:59:57,686 INFO org.apache.oozie.command.wf.KillXCommand: USER[user] GROUP[-] TOKEN[ ] APP [测试] 作业 [0000000-131008185935754-oozie-oozi-W] 操作 [-] ENDED WorkflowKillXCommand for jobId=0000000-131008185935754-oozie-oozi-W 2013-10-09 13:41:32,654 警告 org.apache。 oozie.command.wf.KillXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725: 工作流实例不能被杀死,0000000- 131008185935754-oozie-oozi-W,错误代码:E0725 2013-10-09 13:41:45,199 警告 org.apache.oozie.command.wf.KillXCommand:USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725: 工作流实例不能被杀死, 0000000-131008185935754-oozie-oozi-W,错误代码:E0725 2013-10-09 13:42:04,869 WARN org.apache.oozie.command.wf.ResumeXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie- oozi-W] ACTION[-] E1100:命令前置条件在执行前不成立,[工作流的状态为 KILLED 未暂停],错误代码:E1100 2013-10-09 13:45:56,357 WARN org.apache.oozie.command .wf.KillXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725: 工作流实例不能被杀死,0000000-131008185935754-oozie -oozi-W,错误代码:E07250000000-131008185935754-oozie-oozi-W,错误代码:E0725 2013-10-09 13:42:04,869 WARN org.apache.oozie.command.wf.ResumeXCommand: USER[user] GROUP[-] TOKEN[] APP[测试] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E1100:命令前置条件在执行前不成立,[工作流的状态是KILLED is not SUSPENDED],错误代码:E1100 2013-10-09 13:45 :56,357 WARN org.apache.oozie.command.wf.KillXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725: 工作流实例无法杀死,0000000-131008185935754-oozie-oozi-W,错误代码:E07250000000-131008185935754-oozie-oozi-W,错误代码:E0725 2013-10-09 13:42:04,869 WARN org.apache.oozie.command.wf.ResumeXCommand: USER[user] GROUP[-] TOKEN[] APP[测试] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E1100:命令前置条件在执行前不成立,[工作流的状态是KILLED is not SUSPENDED],错误代码:E1100 2013-10-09 13:45 :56,357 WARN org.apache.oozie.command.wf.KillXCommand: USER[user] GROUP[-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725: 工作流实例无法杀死,0000000-131008185935754-oozie-oozi-W,错误代码:E0725命令前置条件在执行前不成立,[workflow's status is KILLED is not SUSPENDED],错误代码:E1100 2013-10-09 13:45:56,357 WARN org.apache.oozie.command.wf.KillXCommand: USER[user] GROUP [-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725:工作流实例无法被杀死,0000000-131008185935754-oozie-oozi-W,错误代码:E0725命令前置条件在执行前不成立,[workflow's status is KILLED is not SUSPENDED],错误代码:E1100 2013-10-09 13:45:56,357 WARN org.apache.oozie.command.wf.KillXCommand: USER[user] GROUP [-] TOKEN[] APP[Test] JOB[0000000-131008185935754-oozie-oozi-W] ACTION[-] E0725:工作流实例无法被杀死,0000000-131008185935754-oozie-oozi-W,错误代码:E0725

走近试过:

  1. 无密码 SSH 设置
  2. 用户代理集
  3. 授予所需文件夹的权限

谢谢;

卡萨。

4

4 回答 4

9

我刚刚遇到了类似的问题。我有一个可以以 USER 身份运行的案例:

ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=no -o StrictHostKeyChecking=no -o ConnectTimeout=20 USER@1.2.3.4 mkdir -p oozie-oozi/0000000-131008185935754-oozie-oozi-W/action1--ssh/

在命令行上手动操作它可以工作,但是当通过 Oozie 以用户身份启动时它失败了。

就我而言,它失败的原因是我在 oozie 服务器上的 USER 和远程机器上的 USER 之间设置了无密码 ssh。需要做的是在 oozie 服务器上的 oozie 和远程机器上的 USER 之间设置无密码 ssh。换句话说,在 oozie 服务器上 su 到 oozie 并手动运行上述命令。如果失败,它将在 Oozie 中失败。如果它有效,那么它应该在 Oozie 中有效(假设其他所有内容都是正确的,比如 dir 权限等)

看看你的 oozie 服务器以什么用户身份运行:

ps -ef | grep oozie

无论用户需要无密码 ssh 到远程机器上的 USER 。

于 2013-10-24T21:00:18.987 回答
1

无论 quux00 回答什么都是正确的。我只是补充几点。由于 ssh-action 中的命令 ssh 将由 oozie 用户执行,因此您需要将 oozie 设置为 bash 用户。

为此,您需要更改集群所有节点上的 /etc/passwd 文件。在 /etc/passwd 文件中查找以下值(与其类似)。

oozie:x:488:487:Oozie User:/var/lib/oozie:/bin/false 

并将其更改为

oozie:x:488:487:Oozie User:/var/lib/oozie:/bin/bash

这实际上会使 oozie 用户成为 bash 用户。然后继续在 oozie 用户和您想要在任何主机上的任何其他用户之间进行无密码身份验证。

然后尝试再次重新运行 oozie 作业。让我知道它是否有效。希望能帮助到你!!!

于 2014-01-15T10:16:18.287 回答
0

这是一个非常棘手的问题,我只能破解它。我对给出的答案不满意,所以这里是我的版本。以下对我来说失败了(我可以在日志中看到)

ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=no -o StrictHostKeyChecking=no -o ConnectTimeout=20 user@XXX.XX.XX.XXX mkdir -p oozie-oozi/0000067-130808155814753-oozie-oozi-W/mysshjob--ssh/

但是,如果尝试了相同的命令但删除了 KbdInteractiveDevices=no 或更改了 KbdInteractiveDevices=pam 它可以工作

ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=pam -o StrictHostKeyChecking=no -o ConnectTimeout=20 user@XXX.XX.XX.XXX mkdir -p oozie-oozi/0000067-130808155814753-oozie-oozi-W/mysshjob--ssh/

无论如何,我认为旧的 ssh 密钥存在一些问题,所以我尝试跟踪它并且它有效

$ ssh-keygen -t dsa
$ cat ~/.ssh/id_dsa.pub > ~/.ssh/authorized_keys2
于 2014-02-20T15:06:42.993 回答
-1

遵循以上所有建议后

oozie:x:488:487:Oozie User:/var/lib/oozie:/bin/false 

并将其更改为

oozie:x:488:487:Oozie User:/var/lib/oozie:/bin/bash

只需尝试以下步骤:

  1. 使用以下流程创建无密码通信:

    sudo su - oozie
    oozie@localhost: ssh-keygen -t dsa
    

    将生成的公钥复制到本地远程服务器,例如apps@XXXXXXX

  2. 试试看ssh apps@XXXXXXX,你会登录到远程没有错误

  3. 转到 HUE 并选择 SSH 操作并提供您的 BASH 命令,如bash -x yourscript参数
  4. 节省
  5. 提交
于 2016-06-17T11:07:04.280 回答