对于我正在使用的服务器技术,可以通过运行一些命令行参数手动将服务器加入集合体。在某一时刻,控制台会提示您是否要接受您输入(y/n)
的证书链并且命令一直在运行。我试图自动化这个过程,但我已经遇到了响应输入提示的问题,并且在挖掘之后听说它可能是SSL的事情,所以我不知道是否有这样做的方式不同。
如果您手动执行此操作,它的外观如下:
Joining the collective with target controller ...this may take a while
SSL trust has not been established with the target server
//certificate chain
Do you want to accept the above certificate chain? (y/n)
然而,两者:
echo "y y" | bash ./script.sh
//inside script.sh
echo "y y" | $(command)
最后回复:
Joining the collective with target controller ...this may take a while
SSL trust has not been established with the target server
//certificate chain
Input console is not available
Aborting join collective.
Error:
Unable to complete the MBean operation
Error: java.securit.cert.CertificateException: User has rejected the request to trust the
certificate chain
我希望有人可以通过手动回复来解决这种问题的方法
答案 0 :(得分:3)
错误Input console is not available
表明目标程序期望与实际终端通信,而不是管道(如果您尝试echo
进入程序,则会获得该管道。)
在这种情况下,您将使用expect
等模拟真实终端(使用伪tty)的方式自动化程序,并且通常可以“欺骗”这样的程序,使其相信它们正在与之通信一个实际的终端。 expect
将允许您将任意命令输入程序。
有关如何使用Expect(此处为自动ssh
)的示例,请参阅Bash/Expect Script for SSH。
答案 1 :(得分:1)
根据@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]
}
}
答案 2 :(得分:0)
我假设您正在使用WebSphere Liberty作为您的服务器技术,因为输出是我在安装时得到的。无论如何,您需要输入的关键参数是--autoAcceptCertificates
例如:
collective join defaultServer --host=controller \
--port=9443 \
--keystorePassword=memberPassword \
--user=adminUser \
--password=adminPassword \
--autoAcceptCertificates