Commands needed:
   conf/cmd/remote_exec
   conf/cmd/copy

If ! conf/cmd/remote_exec:
   use builtin
If ! conf/cmd/copy:
   use builtin

--------------------------------------------------------------------------------

--cmd-dir?
$__cdist_cmd_dir

--------------------------------------------------------------------------------
   -> Depend on session!

Builtin:
        cdist.exec.run_or_fail(["scp", "-qr", source, 
                                self.remote_user + "@" + 
                                self.target_host + ":" + 
                                destination])

self.remote_prefix = ["ssh", self.remote_user + "@" + self.target_host]

        self.remote_user = remote_user
        self.remote_prefix = remote_prefix

--------------------------------------------------------------------------------
What is in a session?

   base_dir
   target_host

--------------------------------------------------------------------------------
remote_user 
   pseudo-static, can be hardcoded again
--------------------------------------------------------------------------------

Result:

os.environ['__remote_exec'] = ["ssh", "-l", "root" ]

os.environ['__remote_exec'] = ["ssh", "-o", "User=root" ]
os.environ['__remote_copy'] = ["scp", "-o", "User=root" ]


__remote_exec=~/sudossh __remote_copy=... cdist config localhost

~/sudossh hostname $@...
~/sudocopy a hostname:b

~/chrootssh
~/chrootcopy



a)
   3 cmd verzeichnnise: cdist, sudo, chroot
   pro aufruf variable ändern

b)
   1 dir, mit zeug
   pro aufruf variablen ändern


conf/cmd/remote_exec 

args for __remote_exec
   $1 = hostname
   $2 - ...  = stuff to be executed in /bin/sh on remote side
   $2 - $7 = env
   $7 - 12 = cmd


args for __remote_copy
   $1 = file here
   $2 = hostname:destination

--------------------------------------------------------------------------------
There needs to be an easy way to change those cmds!
--------------------------------------------------------------------------------
Env-Passing:
   _a=b test -> test can access $_a
   _a=b test $_a -> $1 = "", because _a is *not* set within the shell
   _a=b; test -> can access $_a
   _a=b; test $_a -> $1 == "b"
