我如何通过带有会话功能的ssh将命令发送到远程系统

问题描述 投票:0回答:1

我需要使用位于Ubuntu 18.04机器上的控制台启动Java Rest服务器。我公司使用的大厅版本为5.5.11。服务器代码是用Java编写的,因此在命令行中只需一个简单的java -jar <uber.jar>就可以了(请参阅下文)。在生产中,我不会有这种简单的奢侈,因此是我的问题。

我有一个scp命令,可以将.jar从concourse复制到目标Ubuntu计算机:

scp -i /tmp/key.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ./${NEW_DIR}/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST}:/var/www

请注意,我的私钥是通过-i传递的,我可以确认它是否有效。

[我遵循了另一个看起来很有希望的SO问答:Getting ssh to execute a command in the background on target machine,但尝试对建议的解决方案和其他答案进行一些排列后,我仍然没有开始我的休息服务。

我已经在我的主题脚本中尝试过对该行的一些排列:

ssh -f -i /tmp/pvt_key1.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST} "bash -c 'nohup java -jar /var/www/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} -c \"/opt/testcerts/clientkeystore\" -w \"password\" > /dev/null 2>&1 &'"

我已经尝试过在ssh中使用-f和-t开关,不使用文件流重定向,使用nohup和Linux背景('&')命令,以及使用各种方式来对引号进行转义。

在bash提示符下,此行成功启动了我的服务器。需要使用两个开关来指向证书并提供密码:

java -jar rest-service.jar -c "/opt/certificates/clientkeystore" -w "password"

我确实认为这可以在Concourse中完成,但是我仍然停留在这一点上。

concourse concourse-pipeline
1个回答
0
投票

经过大量尝试后出现错误,看来我需要这样做:

ssh -f -i /tmp/pvt_key1.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST} "bash -c 'sudo java -jar /var/www/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} -c \"/path/to/my/certificate\" -w \"password\" > /var/www/log.txt 2>&1 &'"

关键是我缺少命令的'sudo'部分。使用nohup而不是放入Linux bash背景指示符('&')似乎给我一个错误。这对我有用,但也欢迎其他人发布具有更好答案或更好方法的回复。

© www.soinside.com 2019 - 2024. All rights reserved.