我可以通过两种方式运行远程脚本。第一个(间接)#ssh 第二个(ssh 连接后)#ssh ##exit(返回主机终端)
我相信通道转发的类型存在一些差异。换句话说,当我使用第一种方式运行远程脚本时,脚本的输出应该不是主机 mashine 而是远程打印,就像第二种方式一样。
我有两台机器 uturksat1 和 uturksat2 在 uturksat2 中,我有一个 linux 脚本 (/tmp/runScript.sh) 和 Java 类 Provider。Linux 脚本运行 Provider Java 应用程序,该应用程序打开一个套接字然后监听它。
#!/bin/bash
echo "Provider"
$JAVA_HOME/bin/java -cp /tmp Provider&
$JAVA_HOME/bin/java -version
rm /tmp/pid
echo "$!"> /tmp/pid
echo "Provider-finish"
exit 0
在 uturksat1 机器上,我输入以下命令
root@UTURKSAT1:/tmp# ssh uturksat2 /tmp/runScript.sh
Provider
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
Provider-finish
Waiting for connection
它不会自动返回命令提示符,我必须按 ctrl+c 才能返回
当我输入以下命令时:
root@UTURKSAT1:/tmp# ssh -t uturksat2 /tmp/runScript.sh
Provider
Waiting for connection
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
Provider-finish
Connection to uturksat2 closed.
root@UTURKSAT1:/tmp#
Provider 应用程序未运行,我可以通过 telnet 到 Provider 正在侦听的端口 2004 对其进行测试。
telnet uturksat2 2004
最后最后一个问题是Provider使用log4j来保存它的internall log,在远程linux脚本执行的第一种方式中,log4j lof文件没有被创建,但是第二种方式是创建的。