Se não houver uma sessão existente para se conectar, a tela usará o comando que você fornecer após o sinalizador -R . Então, isso deve fazer o que você quiser (sem ter que tocar em .screenrc):
$ ssh [...]@127.0.0.1 screen -R bash -l
(Esta é certamente a maneira mais simples de fazer o que você originalmente pretendia fazer.)
Mas desde que você perguntou, eu também mencionarei porque sua abordagem bash -l não funcionou. Foi tão perto!
bash -c leva apenas o próximo argumento como um comando. Argumentos depois disso vão para $0 , $1 , etc.
$ bash -c echo bar
[just a blank line]
$ bash -c 'echo foo'
foo
$ bash -c 'echo $1' foo bar baz
bar
Isso faz o que você queria que bash -l -c screen -R fizesse:
$ ssh [...]@127.0.0.1 bash -l -c "'screen -R'"
Sim, excitantemente você precisa de dois níveis de cotação para que isso funcione: as aspas externas dizem ao seu shell local para preservar as aspas internas, e as aspas internas são necessárias porque o ssh envia o comando resultante, bash -l -c 'screen -R' , como um string com quatro espaços, não como uma lista de quatro palavras. Com um nível de aspas, o shell remoto ainda veria bash -l -c screen -R .
Isso também seria feito, com o shell remoto recebendo a string de comando bash -l -c screen\ -R :
$ ssh [...]@127.0.0.1 bash -l -c 'screen\ -R'
Ou isso, para fornecer o shell remoto bash -l -c "screen -R" :
$ ssh [...]@127.0.0.1 bash -l -c \"screen -R\"