Então em ssh.c
para o OpenSSH 7.6p1 encontramos
case 'N':
no_shell_flag = 1;
options.request_tty = REQUEST_TTY_NO;
então -N
faz duas coisas:
- o
no_shell_flag
aparece apenas emssh.c
e é ativado apenas para as opções-W
ou-N
, caso contrário, ele aparece em alguns blocos lógicos relacionados aControlPersist
e verificação de integridade envolvendo os garfos de plano de fundo. Eu não vejo uma maneira que uma opção possa definir diretamente. - de acordo com
readconf.c
orequest_tty
corresponde à opçãoRequestTTY
detalhada emssh_config(5)
.
Isso deixa (além do monkey patchear o OpenSSH e recompilar, ou pedir uma opção ssh_config
para alternar no_shell_flag
com ...) algo como:
Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234
RequestTTY no
RemoteCommand cat
Que tecnicamente inicia um shell, mas esse shell deve substituir-se imediatamente com o programa cat
, que deve então bloquear permitindo que o encaminhamento de porta seja usado enquanto isso. cat
é portátil, mas consumirá entrada (se houver) ou poderá falhar (se a entrada padrão for fechada). Outra opção seria executar algo que apenas bloqueia .