Inside here documents where the delimiter after `<<` (here `EOF`) is not quoted, the `<backslash><newline>` sequence is removed, that's a _line continuation_.

Actually, the only cases where `<backslash><newline>` is not removed is:

- inside single quotes
- inside here documents where the delimiter is quoted
- where the backslash itself is quoted (`<backslash><backslash><newline>`)

<b></b>

 cat << EOF
 foo\
 bar
 EOF

outputs

 foobar

So, here you can do:

 ssh user@server << EOF
 command_one
 command_two argument1 argument2 argument3 argument4 \
 argument5 argument6 argument7
 command_three
 EOF

And `ssh` will end up being fed:

 command_one
 command_two argument1 argument2 argument3 argument4 argument5 argument6 argument7
 command_three

On its stdin.

Even if you used: `ssh ... << 'EOF'` so as to avoid parameter expansion, command substitution and arithmetic expansion being performed inside the here-document, `ssh` would be fed:

 command_one
 command_two argument1 argument2 argument3 argument4 \
 argument5 argument6 argument7
 command_three

But the remote shell would interpret that `<backslash><newline>` as a line continuation, so it would have the same effect.

Note that when you do:

 ssh user@host << EOF

`sshd` on the remote host runs the user's login shell to interpret that code. Since it could be anything, not necessarily a Bourne-like shell, it may be better to run:

 ssh user@host sh << EOF

Where `sshd` runs `user-s-login-shell -c sh`, so you know a Bourne-like shell is interpreting your code.

A significant difference though is that in that case, `user-s-login-shell` is not started as a login shell so won't read `/etc/profile` or `~/.profile` (or the equivalent for the user's login shell) to set the login session up.

The backslashes can be avoided by using `xargs`:

 ssh user@server sh << EOF
 command_one
 xargs command_two << END_OF_ARGS
 argument1 argument2 argument3 argument4
 argument5 argument6 argument7
 END_OF_ARGS
 command_three
 EOF

Or by using a shell like `rc`, `ksh93`, `zsh`, `bash`, `yash` and an array:

With `rc`/`zsh` syntax:

 ssh user@server zsh << 'EOF'
 command_one
 args=(
 argument1 argument2 argument3 argument4
 argument5 argument6 argument7
 )
 command_two $args
 command_three
 EOF

(here quoting `EOF` so that `$args` is not expanded by the local shell).

Or with the `ksh93`/`bash`/`yash` syntax (also works with `zsh`):

 ssh user@server bash << 'EOF'
 command_one
 args=(
 argument1 argument2 argument3 argument4
 argument5 argument6 argument7
 )
 command_two "${args[@]}"
 command_three
 EOF