Bash 通过ssh将脚本和二进制数据传输到stdin
我想远程执行一个bash脚本,它使用tarball并对其执行一些逻辑。诀窍是,我只想使用一个ssh命令来完成它(而不是对tarball使用Bash 通过ssh将脚本和二进制数据传输到stdin,bash,ssh,tar,Bash,Ssh,Tar,我想远程执行一个bash脚本,它使用tarball并对其执行一些逻辑。诀窍是,我只想使用一个ssh命令来完成它(而不是对tarball使用scp,然后对脚本使用ssh) bash脚本如下所示: cd /tmp tar -zx ./archive/some_script.sh rm -r archive 我意识到我可以简单地将这个脚本重新格式化为一行代码并使用 tar -cz ./archive | ssh $HOST bash -c '<commands>' tar-cz./ar
scp
,然后对脚本使用ssh
)
bash脚本如下所示:
cd /tmp
tar -zx
./archive/some_script.sh
rm -r archive
我意识到我可以简单地将这个脚本重新格式化为一行代码并使用
tar -cz ./archive | ssh $HOST bash -c '<commands>'
tar-cz./archive | ssh$HOST bash-c''
但我的实际脚本非常复杂,我必须通过stdin将它传输到
bash
。这里的挑战是ssh
只提供了一个输入管道(stdin),我想将其用于bash脚本和tarball。我提出了两个解决方案,都包括stdin中的bash脚本和tarball
1.将base64编码的tarball嵌入到heredoc中
在这种情况下,服务器接收到一个bash脚本,其中tarball被嵌入到herdoc中:
base64-d相当聪明。从来没有做过那种级别的dbl嵌入。祝你好运,继续发帖!
ssh $HOST bash -s < <(
# Feed script.
cat <<'EOF'
function main() {
cd /tmp
tar -zx
./archive/some_script.sh
rm -r archive
}
main
EOF
# Create local tarball and pipe it
tar -cz ./archive
)