Aggirare l'autenticazione SSH a due fattori con connessione master e port forwarding?


8

Il problema 1.0

Sto lavorando su un server che supporta solo l'autenticazione a due fattori (l'autenticazione della coppia di chiavi è disabilitata). Quindi ogni volta che il mio client SFTP vuole caricare un file, mi chiede un token ... dopo 3 minuti che diventa un UX not_very_nice.

La soluzione 1.0

Quindi ho imparato a conoscere il multiplexing SSH e ora posso aprire manualmente una connessione master (dal terminale) e tutte le altre connessioni ssh possono essere multiplexate in alto, in questo modo:

$ ssh example_com_master
Verification code: (/me enters the token code)
Password: (/me enters my pass)
Welcome to Ubuntu 14.04 blah blah....
Last login: Wed Oct  1 11:24:15 2014 from 12.34.56.78
$

Quindi, da un altro terminale o da un altro software:

$ ssh my.example.com
Last login: Wed Oct  1 16:34:45 2014 from 12.34.56.78
$ 

Quindi, missione compiuta, non più entrare nel token 2FA. E nessuna password, del resto, SSH FTW!

~ / .Ssh / config:

Host example_com_master
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster yes
  ControlPath ~/.ssh/sockets/example_com
  ControlPersist 10

Host my.example.com
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster no
  ControlPath ~/.ssh/sockets/example_com

Problema 2.0 (TLDR)

Alcuni software (ad esempio PyCharm IDE) usano la propria libreria SSH / binaria / qualunque cosa! Ciò significa che nulla che scrivo ~/.ssh/configlo influenzerà, AFAIK.

Questo è il mio problema attuale: esiste un modo per "ingannare" tale software in modo da utilizzare una connessione master già esistente?


Un'idea: poiché di solito è possibile configurare il software per utilizzare una porta diversa a cui connettersi, mi chiedevo se fosse possibile impostare un qualche tipo di tunneling che multiplexasse le connessioni in entrata sul master esistente. Ma il mio ragazzo mi ha deluso ...

modificare:

Lo scopo principale è connettersi all'interprete / debugger remoto di Python.

modifica 2:

Tutte le porte sono chiuse tranne le 22 e le 80. Tuttavia, è possibile fare:

remote$ ssh localhost:2222
(password or securekey login, both work)
remote$ 

ma 2222 è aperto solo per le connessioni da localhost e gli amministratori non apriranno alcuna porta aggiuntiva, dicendo "chiunque potrebbe usarlo".


Potrei fraintendere il tuo problema, ma non riesci a risolverlo con un attacco ssh locale? Ciò trasformerebbe la tua azione sftp in una copia locale, con l'ssh gestito dal processo di mount che puoi controllare.
Belrog,

Avrei dovuto menzionarlo nella domanda ... Ho bisogno di SSH per eseguire l'interprete / debugger Python remoto. In realtà ho un mount sshfs in atto per la sincronizzazione dei file :)
frnhr

Suppongo che stai lavorando su alcuni bit hardware molto specifici da remoto? Lo sviluppo remoto è davvero doloroso. Una VM locale sarebbe un'idea migliore se puoi farla funzionare.
Belrog,

Vero dat! Ma su questo particolare progetto ci sono diverse complicazioni con la creazione di un ambiente locale che non possono essere facilmente risolte :(
frnhr

@Belrog Ho convertito la tua risposta in un commento. Si prega di inviare solo una risposta se in realtà risponde alla domanda. Per chiedere chiarimenti, pubblica un commento. Ecco a cosa servono.
terdon

Risposte:


2

Abbastanza un problema interessante che hai.

La vera soluzione sarebbe chiedere aiuto al tuo amministratore di sistema per primo.

Se questa non è un'opzione, la prossima cosa migliore è avere libssh di pyCharm o qualunque cosa usi (ho fatto qualche google e non sono riuscito a capirlo) analizzare il tuo `~ / .ssh / config '.

Se ciò non è possibile, potresti essere in grado di eseguire il tuo demone ssh sull'host remoto ascoltando l'indirizzo di loopback e collegarti ad esso con un forward locale.

Per impostare un demone ssh senza privilegi (copiato da un collegamento sulla risposta SF ):

  $ pwd
  /home/<USER>
  $ mkdir -p etc var/run
  $ cp /etc/sshd_config etc
  $ vi etc/sshd_config
  [Set `Port 2230']
  [Set `HostKey /home/<USER>/etc/ssh_host_rsa_key']
  [Set `UsePrivilegeSeparation no']
  [Set `PidFile /home/<USER>/var/run/sshd.pid']
  [:wq!]
  $ ssh-keygen -t rsa -f /home/<USER>/etc/ssh_host_rsa_key -N ''
  Generating public/private rsa key pair.
  Your identification has been saved in /home/<USER>/etc/ssh_host_rsa_key.
  Your public key has been saved in /home/<USER>/etc/ssh_host_rsa_key.pub.
  The key fingerprint is:
  02:5d:02:5d:e8:2e:c6:b9:4c:d9:93:6c:13:ef:5d:61 hein@vmbert2k8
  $ /usr/sbin/sshd -f /home/<USER>/etc/sshd_config -D

Ora inoltra una porta locale (accederai con 2fa qui):

 ssh -L 2230:localhost:2230 example_com_master

E dirigere pyCharm a localhost:2230. È inoltre possibile impostare l'autenticazione della coppia di chiavi sul proprio sshd personalizzato.

Nota che questo è un colpo lungo, e il tuo amministratore di sistema potrebbe non apprezzarlo.

C'è una grande possibilità che pyCharm usi già OpenSSH per la sua implementazione ssh. In tal caso, aggiungere il supporto multiplexing a pyCharm sarebbe molto più semplice della soluzione alternativa che ho proposto.


Grazie per la risposta. Gli amministratori probabilmente non mi permetteranno di eseguire il mio sshd (dubito che sia disponibile anche una porta). Ma se potessi avere un sshd separato in esecuzione sul server, penso che potrebbe non essere necessario multiplexare nulla, configura il server per l'autenticazione della coppia di chiavi. O ci sono alcuni benefici che ho perso?
dal

Hai ragione a non aver bisogno del multiplexing :). Inoltre, so che sarei incazzato se un utente facesse qualcosa del genere senza prima chiedermelo. Inoltre, se chiederai comunque al sysadmin, una soluzione molto più sana sarebbe quella di non richiedere 2fa da localhost. Questo è quello che faccio di solito comunque.
GnP,

:) E se non ci fossero 2fa da localhost, il tunneling può risolvere il problema?
dal

Esatto, se non si richiede 2fa da localhost, connettersi tramite un tunnel è come connettersi localmente. La magia sshd_config è Match Address 127.0.0.1 PasswordAuthentication yes probabilmente seguita da un singolo Matchin una riga a sé stante per chiudere la sezione, se non si aggiunge questo alla fine del file.
GnP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.