In your comment on fons's answer, you say that it doesn't work while using screen
.
Could you elaborate on that? Looking at the source code for openssh, sshd executes the command by calling
YOUR_DEFAULT_SHELL -c COMMAND
So, for example, if your default shell is screen
, then this won't work all that well because screen
's -c
flag just overrides its .scrreenrc
. So, there's really no way to send commands to screen if it's your default shell. You'll have to actually run screen as the command given to ssh, but with a default shell that isn't screen.
If that's what you're trying to do, I think things will get really weird, since screen
will also close windows with non-interactive programs, so you'll have to do a similar trick to fons's, but one level deeper. SO, with, e.g. /bin/bash (and not screen) as your default shell Something like:
ssh user@host -t 'screen bash -l -c "ls;bash"'
Which should --take a deep breath-- ssh into the host, run bash -c with a command of screen, which will make a new window. If this window just opened up ls, it would end, and screen would terminate, so we use fons's trick inside the new screen window.
I think that'll work, if that's even what you were trying to do ;)
ssh example.com 'ls;bash'
?