You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate框架下Mac执行SSH命令遇权限及伪终端问题求助

问题描述

在Mac系统中使用Karate框架执行SSH命令ssh test01.dev.test.com时,无法输入密码,出现以下错误输出:

working dir :null
Pseudo-terminal will not be allocated because stdin is not a terminal.
permission denied please try again

使用的Karate代码片段如下:

def command = """
function(line) {
var proc = karate.fork({ redirectErrorStream: false, useShell: true, line: line });
proc.waitSync();
karate.set('sysOut', proc.sysOut);
karate.set('sysErr', proc.sysErr);
karate.set('exitCode', proc.exitCode);
}
"""
Scenario:
command('ssh test01.dev.test.com')
解决方案

1. 修复伪终端分配问题

当前karate.fork未配置伪终端,导致SSH无法进入交互模式。需在fork参数中添加pty: true,模拟终端环境:

def command = """
function(line) {
var proc = karate.fork({ redirectErrorStream: false, useShell: true, line: line, pty: true });
proc.waitSync();
karate.set('sysOut', proc.sysOut);
karate.set('sysErr', proc.sysErr);
karate.set('exitCode', proc.exitCode);
}
"""

2. 解决密码输入交互问题

即使分配了伪终端,Karate的同步waitSync()也无法处理交互式密码输入,推荐两种替代方案:

方案A:使用sshpass自动注入密码

先通过Homebrew安装sshpass:brew install sshpass,然后修改SSH命令为:

sshpass -p '你的目标服务器密码' ssh test01.dev.test.com

直接将该组合命令传入command()函数即可完成自动登录。

方案B:配置SSH密钥登录(推荐)

这是更安全且无需密码交互的方式:

  • 生成本地密钥对:ssh-keygen -t rsa(一路回车即可)
  • 将公钥复制到目标服务器:ssh-copy-id test01.dev.test.com
    之后执行ssh test01.dev.test.com无需输入密码,可直接登录。

内容的提问来源于stack exchange,提问作者sangam mamadapur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:02:07