Steven, Nico: Problem: How to execute a function instead of binary Solutions: 1) ( cat $lib/* cat bin/cdist-config echo $function $args ) | ssh foo Works partly, does not work for export = ... Needs to copy over lib every time again! 2) scp $dir/lib.sh root@foo:/tmp/lib.sh cat << DONE | ssh root@foo sh source /tmp/lib.sh export foo=bla function args DONE Caches lib directory 3) follow up to 1) __run_remote() { cat << eof | ssh foo . /cdist-config "$@" # NOT USABLE, no export = export = lines possible! eof 4) final solution - write for every remote job a new function - this functions prepares env + reuses ssh header __cdist_remote_explorer() { cat << eof $__cdist_remote_header export foo1=bar export foo2=bar export foo3=bar "$@" eof | __cdist_ssh } Problems found and solved: - remote shell cannot work due to multi line variable export - caching library directory with scp - create function for every remote action -> prepares environment