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