Zwei-Faktor-SSH-Authentifizierung mit Master-Verbindung und Portweiterleitung umgehen?

8

Das Problem 1.0

Ich arbeite an einem Server, der nur Zwei-Faktor-Authentifizierung unterstützt (Schlüsselpaarauthentifizierung ist deaktiviert). Jedes Mal, wenn mein SFTP-Client eine Datei hochladen möchte, fordert er mich nach einem Token auf ... nach 3 Minuten wird dies zu einer not_very_nice UX.

Die Lösung 1.0

Also habe ich etwas über SSH-Multiplexing gelernt und kann jetzt eine Master-Verbindung manuell (vom Terminal aus) öffnen, und alle anderen SSH-Verbindungen können wie folgt oben gemultiplext werden:

$ 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
$

Dann von einem anderen Terminal oder von einer anderen Software:

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

Mission erfüllt, kein 2FA-Token mehr eingeben. Und kein Passwort, 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

Problem 2.0 (TLDR)

Einige Software (z. B. PyCharm IDE) verwenden ihre eigene SSH- Bibliothek / binär / was auch immer! Das bedeutet, dass nichts, was ich ~/.ssh/configeingebe, es beeinflusst, AFAIK.

Das ist mein aktuelles Problem: Gibt es eine Möglichkeit, solche Software dazu zu bringen, eine bereits vorhandene Master-Verbindung zu verwenden?


Eine Idee: Da Sie normalerweise Software so konfigurieren können, dass sie einen anderen Port für die Verbindung verwendet, habe ich mich gefragt, ob es möglich sein könnte, eine Art Tunneling einzurichten, mit dem eingehende Verbindungen auf einen vorhandenen Master gemultiplext werden. Aber mein Foo hat mich im Stich gelassen ...

bearbeiten:

Hauptzweck ist die Verbindung zum Remote-Python-Interpreter / Debugger.

bearbeiten 2:

Alle Ports außer 22 und 80 sind geschlossen. Es ist jedoch möglich:

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

2222 ist jedoch nur für Verbindungen von localhost geöffnet, und Administratoren öffnen keine zusätzlichen Ports und sagen "Jeder kann es verwenden".

frnhr
quelle
Ich könnte Ihr Problem falsch verstehen, aber können Sie es nicht mit einem lokalen SSH-Mount umgehen? Das würde Ihre SFTP-Aktion in eine lokale Kopie verwandeln, wobei der SSH von dem Mount-Prozess verarbeitet wird, den Sie steuern können.
Belrog
Ich hätte das in der Frage erwähnen sollen ... Ich brauche die SSH, um einen Remote-Python-Interpreter / Debugger auszuführen. Ich habe tatsächlich einen SSHFS-Mount für die Dateisynchronisierung eingerichtet :)
vom
Ich gehe davon aus, dass Sie remote an bestimmten Hardwareteilen arbeiten. Fernentwicklung ist wirklich schmerzhaft. Eine lokale VM wäre eine bessere Idee, wenn Sie sie zum Laufen bringen könnten.
Belrog
Das ist wahr! Aber bei diesem speziellen Projekt gibt es einige Komplikationen beim Einrichten einer lokalen Umgebung, die nicht einfach zu lösen sind :(
am
@ Belrog Ich habe deine Antwort in einen Kommentar umgewandelt. Bitte posten Sie eine Antwort nur, wenn sie die Frage tatsächlich beantwortet . Um eine Klarstellung zu erhalten, schreiben Sie einen Kommentar. Dafür sind sie da.
Terdon

Antworten:

2

Ein interessantes Problem, das Sie haben.

Die wirkliche Lösung wäre, zuerst Ihren Systemadministrator um Hilfe zu bitten.

Wenn dies keine Option ist, ist es das nächstbeste, pyCharms libssh oder was auch immer es verwendet zu haben (ich habe ein bisschen gegoogelt und konnte es nicht herausfinden), um Ihr ~ / .ssh / config zu analysieren.

Wenn das nicht möglich ist, Sie könnten die Lage sein, Ihren eigenen SSH - Daemon läuft auf dem Remote - Host Hören auf der Loopback - Adresse und , um es mit einem lokalen vorwärts zu verbinden.

So richten Sie einen nicht privilegierten SSH-Dämon ein (kopiert von einem Link in der SF-Antwort ):

  $ 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

Leiten Sie nun einen lokalen Port an diesen weiter (Sie werden sich hier mit 2fa anmelden):

 ssh -L 2230:localhost:2230 example_com_master

Und direkt pyCharm an localhost:2230. Sie können die Schlüsselpaarauthentifizierung auch auf Ihrem benutzerdefinierten SSHD einrichten.

Beachten Sie, dass dies ein langer Weg ist und Ihr Systemadministrator ihn möglicherweise nicht zu schätzen weiß.

Es besteht eine große Chance, dass pyCharm OpenSSH bereits für seine SSH-Implementierung verwendet. In diesem Fall wäre das Hinzufügen von Multiplexing-Unterstützung zu pyCharm viel einfacher als die von mir vorgeschlagene Problemumgehung.

GnP
quelle
Danke für die Antwort. Die Administratoren werden mir wahrscheinlich nicht erlauben, mein eigenes sshd zu betreiben (ich bezweifle, dass sogar ein Port verfügbar ist). Aber wenn ich ein separates sshd auf dem Server ausführen könnte, müsste ich möglicherweise nichts multiplexen, sondern nur den Server für die Schlüsselpaarauthentifizierung konfigurieren. Oder gibt es einige Vorteile, die ich verpasst habe?
Freitag,
Sie haben Recht damit, dass Sie überhaupt kein Multiplexing benötigen :). Außerdem weiß ich, dass ich sauer wäre, wenn ein Benutzer so etwas tun würde, ohne mich vorher zu fragen. Auch wenn Sie den Systemadministrator trotzdem fragen, wäre eine viel vernünftigere Lösung, 2fa nicht von localhost zu benötigen. Das mache ich normalerweise sowieso.
GnP
:) Und wenn es keine 2fa von localhost gäbe, kann das Tunneln das Problem lösen?
Freitag,
Wenn Sie 2fa von localhost nicht benötigen, ist die Verbindung über einen Tunnel wie eine lokale Verbindung. Der Magie von sshd_config folgt Match Address 127.0.0.1 PasswordAuthentication yes wahrscheinlich eine einzelne Matchin einer eigenen Zeile, um den Abschnitt zu schließen, wenn Sie dies nicht am Ende der Datei hinzufügen.
GnP