Какова соответствующая опция .ssh/config для ssh -N

Он двоичный. Окончательным показателем этого является тот факт, что он не позволит вам выгружать двоичные данные в стандартный вывод с сообщением об ошибке:

# ip route save
Not sending binary stream to stdout
Dump terminated
13
15.02.2018, 02:31
3 ответа

Así que en ssh.cpara OpenSSH 7.6p1 encontramos

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

entonces -Nhace dos cosas:

  • el no_shell_flagsolo aparece en ssh.cy solo está habilitado para las opciones -Wo -N; de lo contrario, aparece en algunos bloques lógicos relacionados con ControlPersisty la verificación de cordura que involucra bifurcaciones en segundo plano. No veo una forma en que una opción pueda establecerlo directamente.
  • según readconf.cel request_ttycorresponde a la opción RequestTTYdetallada en ssh_config(5).

Esto deja (aparte de parchear OpenSSH y recompilar, o solicitar una opción ssh_configpara alternar no_shell_flagcon... )algo así como:

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat

Lo que técnicamente inicia un shell, pero ese shell debería reemplazarse inmediatamente con el programa catque luego debería bloquearse y permitir que el reenvío de puertos se use mientras tanto. cates portátil, pero consumirá la entrada (si hay alguna )o podría fallar (si la entrada estándar está cerrada ). Otra opción sería ejecutar algo que simplemente bloquee .

31
27.01.2020, 19:52

@thrig tiene la respuesta correcta según su deseo de hacer esto únicamente dentro de.ssh/config

También se podría considerar usar una función con valores predeterminados para hacer que otros comandos de túnel sean rápidos (, especialmente si el túnel no cambia sino solo el host ).


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

Aquí hay tres ejemplos en uso :sin argumentos, se utilizan los valores predeterminados especificados en la función:

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

con túnel predeterminado, ejecutar en un host diferente:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

con ambos valores predeterminados, ejecute uno completo -a un nuevo host/túnel:

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345
3
27.01.2020, 19:52

Более полезная удаленная команда, основанная на ответе @thrig:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _будет блокировать соединение, пока пользователь не нажмет control+c.

0
27.01.2020, 19:52

Теги

Похожие вопросы