I wanted to run a script on a remote machine. The simple solution is this:
ssh remote1 some-script
This works until the remote script doesn't want to connect to another remote machine (
remote2) which requires interactive authentication, like tis one (
remote2 is only reachable through
remote1 in this case):
ssh remote1 "ssh remote2 some-script"
The solution for the problem is to use the
-t option for ssh.
ssh -t remote1 "ssh remote2 some-script"
This works, but I get probems in case I use this (where
some-script may execute further ssh commands):
ssh -t remote1 some-script
I found that some environment variables are not set which are set when I don't use the
-t option. These envrionment variables are set in scripts from
/etc/profile.d. I guess that these scripts are not run for some reason if using the
-t option, but are run if I don't use it.
What's the reason of this? Is there any way to work around it? I am using SUSE linux (version 10).
Edit: I did some additional research. I put some output lines to the following places:
- in one file in
~/.bash_profile(file didn't exist before)
~/.bashrc(file didn't exist before)
Then I checked several scenarios what output I get and in what order (the environment variable I checked is
ssh -t remote1:
ssh remote1 echo '$PATH': only
ssh -t remote1 echo '$PATH': no script output.
Now I really don't understand what's going on. If I run an interactive shell, everything seems to be working fine (though I find it strange that
~/.bashrc is included before
~/.bash_profile). If I start a non-interactive shell without
-t, profile scripts don't seem to run but environment variables are set. If I start a non-interactive shell with
-t, then profile scrtipts are not run and environment variables are not set. Does anyone have an explanation on this?