SSH

SSH

我试图在远程主机上传递脚本,而不在詹金斯控制台上获取命令输出。一个示例脚本:

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
exit
END

产生以下输出:

+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"

exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$ 
[update@dispotest ~]$ exit
exit
Connection to dispotest closed.
Finished: SUCCESS

我的主要问题是两端之间的整个部分sh将在jenkins的控制台输出中发布甚至两次。我猜第一次是为了启动 ssh 会话,第二次是在 ssh 会话内。这使得找到一个看起来安静的合适地方变得很困难。所以我希望有人知道如何从控制台隐藏脚本本身。但我不想完全静音。我仍然对 ssh 会话中运行的命令的输出感兴趣。

我已经尝试过很多 > /dev/null 。但通常情况下,echo 的输出或在 shell 中执行的命令也消失了,而 id 想要保留。

我尝试过的一些例子

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END

至少输出捆绑的命令

+ sh start_stop_jboss_remote.sh
{

printf '%s world!\n' "$1"
exit

} 2> /dev/null
[update@dispotest ~]$ {
> 
> printf '%s world!\n' "$1"
> exit
> 
> } 2> /dev/null
hello world!
Connection to dispotest closed.
Finished: SUCCESS

实施例3

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' 2> /dev/null <<'END'
printf '%s world!\n' "$1"
exit
END

输出

+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"
exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$ exit
exit
Finished: SUCCESS

实施例4

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' 2> /dev/null <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END

输出

+ sh start_stop_jboss_remote.sh
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
[update@dispotest ~]$ {
> printf '%s world!\n' "$1"
> exit
> } 2> /dev/null
hello world!
Finished: SUCCESS

答案1

您可以使用 调用交互式登录 shell -t -t。从命令行中删除它们。

将参数传递给脚本的正确方法bash -s

bash -s "$COMMAND" "$SERVICENAME" <<'END_SCRIPT'
here goes
script that uses
"$1" and "$2"
END_SCRIPT

$COMMAND脚本会传递和的值,并且这些值在脚本中$SERVICENAME可以作为$1和使用。$2脚本本身还应该被引用,这是通过在开头引用here-document 标签来完成的。

在你的情况下:

ssh -o StrictHostKeyChecking=no "user@$SERVER"  bash -s "$COMMAND" "$SERVICENAME" <<-'ENDSSH'
        echo "I'd like to see this"
        if [ "$1" = "stop" ]; then
            ...
        fi
ENDSSH

请注意,ENDSSH末尾的标记必须位于第一列(行的第一列),或者使用制表符缩进。

对我有用的例子:

ssh myhost bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
END

hello world!它在终端中生成字符串。

相关内容