首先我的Linux知识是有限的! 我更像一个开发者,随便pipe理一些服务器:-)
所以,我在一个RHEL5 / 6(混合)服务器的服务器上运行,这里是我想要做的:我在一个主服务器上有一个Java程序,它在一些远程机器上运行命令。 Java程序将我的命令正确地发送到操作系统 – 可以毫无问题地执行本地命令。 我的问题是在远程服务器上执行命令:
ssh [email protected] "cd /opt/bla" ) 尝试#1
$ ssh [email protected] Pseudo-terminal will not be allocated because stdin is not a terminal. Host key verification failed.
所以,熟悉谷歌,我已经读了关于应该解决问题的tty,但只能导致:
尝试#2
$ ssh -t -t [email protected] tcgetattr: Invalid argument The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established. RSA key fingerprint is <somehex>.
所以我的应用程序卡住了这一点,古怪的Ctrl + Cing后,我看到了以下文字:
Are you sure you want to continue connecting (yes/no)? Killed by signal 2.
所以我假设有些东西在工作,它只是卡在input。 但是,我无法find任何关于这个错误的结论。 其中一个提示是编辑/etc/sudoers并注释掉(我知道这不是推荐的)
# Defaults requiretty
虽然我不知道是否应该改变主设备和/或从设备上的设置,并且需要重启或者重启一个守护进程。
我现在的问题是:这是否导致任何地方或我的尝试毫无价值? 还是有更好的方法来运行主机上的程序触发的从站上的远程命令? 请记住,我不会重新编译我的内核或做任何复杂的shenanigan,因为我只是缺乏Linux的经验..
帮助非常感谢!
我有SSH密钥
这些密钥是否在根帐户下设置?
主机密钥validation失败。
主机'192.168.1.1(192.168.1.1)'的真实性无法build立。 RSA密钥指纹是。
您的程序不写出到known_hosts文件。 您尝试连接的主机尚未使用来自java进程正在使用的帐户。 在使用之前,您将需要生成一个有效的known_hosts文件。 或者,如果你是一个有点信任的人,你可以设置StrictHostKeyChecking no选项。
如果在这个帐户下使用过,那么环境就会有些混乱。 您可能需要强烈考虑为ssh客户端设置configuration文件并定义键和known_host文件的path。 让你的java程序使用ssh -f configfile来引用configuration文件。
通过使用Java库Jsch解决了我的问题,这是一个纯Java的SSH2实现。 我想,在我的环境中我的SSH设置也混乱了,所以这在我看来是更有效的select。
花了我1-2个小时让它工作 – 很容易实现。
无论如何感谢您的build议。 我特别需要使用StrictHostKeyChecking=no选项(它也可以在Java库中使用)来连接。
优点和缺点: