Programowe dodawanie przekierowań portów w sesji ControlMaster SSH

9

Właśnie dowiedziałem się o funkcji ControlMaster / ControlPath w OpenSSH, która pozwala używać jednego połączenia SSH do uruchamiania wielu terminali.

Ponieważ często używam SSH do przekierowania portów, aby uzyskać zaszyfrowane i uwierzytelnione sesje VNC, od razu zrozumiałem, że nie można dodać przekierowania portów do zdalnego serwera, z którym masz już ustanowione połączenie. To jest do bani.

Czasami później odkryłem, że możesz obejść to ograniczenie, wpisując ~ C w uruchomionej sesji terminalu SSH. Otwiera to wiersz poleceń, który pozwala dodawać lub usuwać przekierowania portów.

Moje pytanie brzmi teraz: jak mogę dodać przekierowanie portów do istniejącej sesji SSH, która korzysta z funkcji ControlMaster / ControlPath, bez potrzeby dostępu do sesji terminala w tej sesji SSH. Potrzebuję tego, aby włączyć mój skrypt, który uruchamia bezpieczne tunelowane połączenie VNC, abym mógł dodać, a następnie usunąć przekierowanie portów.

(Wiem, że mógłbym użyć terminalowego multipleksera, takiego jak GNU Screen lub tmux, właściwie już to robię. Ale podoba mi się pomysł użycia tylko jednej sesji SSH z powodów serwerowych).

aef
źródło
1
Zafascynuje mnie, jeśli znajdziesz sposób, aby to zrobić, ale podejrzewam, że nie. Programowe kontrolowanie właściwości sesji SSH, w której tak naprawdę nie jesteś częścią, wydaje się ogromnym problemem bezpieczeństwa.
Caleb
1
Nonsens! W jaki sposób programowo kontrolując właściwości sesji SSH wprowadza ogromny problem bezpieczeństwa? Rozwiązanie jest naprawdę bardzo proste: serverfault.com/a/340361/93109
aculich
Pytanie dotyczy teraz tylko dodawania przekierowań portów, aby lepiej pasowało do zaakceptowanej odpowiedzi. Zadałem pytanie, jak je potem usunąć tutaj: serverfault.com/q/457295/50950
aef

Odpowiedzi:

9

Właściwie to całkiem proste. Po prostu dodaj ctl_cmd -O forwarddo istniejącego polecenia, w ten sposób:

ssh -M -L5555:localhost:22 remotehost

staje się:

ssh -O forward -M -L5555:localhost:22 remotehost

sshStrona podręcznika omawia -O ctl_cmdopcję:

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

To, oczywiście, zakłada pan albo włączone ControlMaster yesw ~/ssh/configpliku lub -Mw wierszu poleceń.

aculich
źródło
1
Czy mógłbyś spróbować odpowiedzieć na powiązane pytanie tutaj: serverfault.com/q/457295/50950
aef