通过 ssh 运行一个别名,通过 ssh 运行另一个别名

通过 ssh 运行一个别名,通过 ssh 运行另一个别名

我正在尝试通过 ssh 运行一个别名,该别名通过 ssh 运行另一个别名。这可能吗?

我在看关于通过 ssh 运行别名的问题,到目前为止我得到了这个:

ssh develop -t /bin/bash -ic "gotoserver"

gotoserver是运行的别名:

ssh -o StrictHostKeyChecking=no -l user 10.10.10.10

这一切都有效,我最终达到了10.10.10.10。但我想在里面运行另一个别名,10.10.10.10所以我尝试了这个:

ssh develop -t /bin/bash -ic "gotoserver -t /bin/bash -ic 'loaddocker'"

但这不起作用。似乎只能认到gotoserver。我仍然结束了,10.10.10.10但命令的其余部分 ( -t /bin/bash -ic 'loaddocker') 似乎被忽略了。

但如果我进去develop跑:

gotoserver -t /bin/bash -ic 'loaddocker'

它起作用并被loaddocker执行。

我究竟做错了什么?我可以用另一种方式来做这件事而不改变developand中的任何内容10.10.10.10吗?

答案1

使用函数而不是别名!

function fnchunk () {
    echo -n function\ ;
    typeset -f ${@}
}

function requote () 
{ 
    if (($#)); then
        local re savedq='#...___+++...#' dblquote='"' singlequote="'" escapedsinglequote="\'" escapeddblquote='\"';
        re="$(printf "${savedq}%s${savedq} " "${@}")";
        re="${re//${dblquote}/${escapeddblquote}}";
        echo "${re//${savedq}/${dblquote}}";
    fi
}

function loadDockerWrapper(){
    echo loaddocker # call loadDocker script not alias
    # or if it was an alias turn it into function here
}

function gotoserver(){
    /usr/bin/ssh -o StrictHostKeyChecking=no -l user 10.10.10.10 -tq "$(fnchunk fnchunk requote gotoserver loadDockerWrapper)" ";" $(requote "${@}")
}

function devCmd(){
    /usr/bin/ssh -tq develop "$(fnchunk fnchunk requote gotoserver loadDockerWrapper)" ";" $(requote "${@}")
}

devCmd gotoserver loadDockerWrapper

答案2

gotoserver应该包含类似于$@所有gotoserver参数的内容。您可以这样使用它:

ssh -o StrictHostKeyChecking=no -l user 10.10.10.10 $@

其中$@将传递给 gotoserver 的所有参数,并且ssh它将是在 10.10.10.10 上发出的命令。

此外,您可以通过用 分隔来逐个发出几个命令;,例如:

echo a ; echo b

相关内容