Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash脚本中使用SSL获得控制台输入?_Linux_Bash_Ssl_Websphere Liberty - Fatal编程技术网

Linux 如何在bash脚本中使用SSL获得控制台输入?

Linux 如何在bash脚本中使用SSL获得控制台输入?,linux,bash,ssl,websphere-liberty,Linux,Bash,Ssl,Websphere Liberty,对于我正在使用的服务器技术,可以通过运行一些命令行参数手动将服务器加入到集合中。在某一点上,控制台会提示您是否要接受证书链,您可以向该证书链输入y/n,并且该命令将继续运行。我正在尝试自动化这个过程,但是我在响应输入提示时遇到了一个障碍,在仔细研究之后,我听说这可能是一个SSL的东西,所以我不知道是否有其他的方法 如果您手动执行此操作,其外观如下所示: 与目标控制器加入集合…这可能需要一段时间 尚未与目标服务器建立SSL信任 //证书链 是否接受上述证书链?是/否 然而,两者: echo y|

对于我正在使用的服务器技术,可以通过运行一些命令行参数手动将服务器加入到集合中。在某一点上,控制台会提示您是否要接受证书链,您可以向该证书链输入y/n,并且该命令将继续运行。我正在尝试自动化这个过程,但是我在响应输入提示时遇到了一个障碍,在仔细研究之后,我听说这可能是一个SSL的东西,所以我不知道是否有其他的方法

如果您手动执行此操作,其外观如下所示:

与目标控制器加入集合…这可能需要一段时间 尚未与目标服务器建立SSL信任 //证书链 是否接受上述证书链?是/否 然而,两者:

echo y|bash./script.sh //inside script.sh echo y |$命令 最后得到这样的回答:

与目标控制器加入集合…这可能需要一段时间 尚未与目标服务器建立SSL信任 //证书链 输入控制台不可用 中止加入集体。 错误: 无法完成MBean操作 错误:java.securit.cert.CertificateException:用户拒绝了信任 证书链 我希望有人能在手动响应之外提供一些解决方法

错误输入控制台不可用表明目标程序希望与真正的终端进行对话,而不是与管道进行对话,如果您尝试回音到程序中,就会得到管道

在这种情况下,您将使用expect之类的工具来自动化程序,它使用伪tty模拟真实的终端,并且通常可以欺骗这样的程序,使其相信它们正在与真实的终端通信。expect将允许您向程序中输入任意命令

有关如何在此处使用Expect实现ssh自动化的示例,请参见。

根据@nneonneo,这里是一个基本的Expect示例:

#!/usr/bin/expect

set timeout 600
spawn -noecho /path/to/script.sh
expect {
  (y/n) {
    send -- "y\n"
    exp_continue
  }
  timeout {
    exit 1
  }
  eof {
    catch wait result
    exit [lindex $result 3]
  }
}

我假设您正在使用WebSphereLiberty作为您的服务器技术,因为输出是我通过安装获得的。无论如何,您需要输入的关键参数是-autoAcceptCertificates

例如:

collective join defaultServer --host=controller \
  --port=9443 \
  --keystorePassword=memberPassword \
  --user=adminUser \
  --password=adminPassword \
  --autoAcceptCertificates

我明白了,我想没有本地的方法可以做到这一点?我的限制相当严格,我必须编写一个脚本,它将在开箱即用的机器上运行,感谢您的解释。不幸的是,没有。据我所知,使用普通bash使用pty没有很好的、相对可移植的功能。或者远程命令不需要真正的终端,但您的SSH不分配tty。您可以使用选项-t强制进行伪tty分配