Zugriff auf ein Remote-Quecksilber-Repository über einen SSH-Proxy unter Windows mit tortoisehg

3991
lorenzog

Ich habe ein entferntes Quecksilber-Repository (verwaltet von hg-gateway) auf einem Server. Der Zugriff auf diesen Server ist nicht für die breite Öffentlichkeit zugänglich. Die Firewall erlaubt jedoch das Ssh-Proxying.

Wie konfiguriere ich einen Windows-Client für den Zugriff auf dieses Repository mit tortoisehg?

Beachten Sie, dass es sich von ist dies, wie es in dieser Frage kein proxying beteiligt ist. Ich suche nach den Fenstern gleichwertig

Host remote-dev user mercurialuser ProxyCommand ssh -q firewalluser@firewall 

für den Zugriff auf ein mercurial Repo wie

hg clone ssh://remote-dev/repo 

Ich habe eine funktionierende Lösung gefunden und werde sie in den Antworten zum Nutzen der Community weiter unten posten.

2

1 Antwort auf die Frage

4
lorenzog

Annahmen zur Systemadministration finden Sie am Ende dieses Beitrags.

  1. Laden und installieren Sie Kitt, Plink, Festzug und Puttygen von hier aus
  2. Wenn Sie keinen SSH-Schlüssel haben, starten Sie Puttygen und:
    1. Wenn Sie bereits einen von Linux generierten Schlüssel haben:
      1. Wählen Sie "Eine vorhandene private Schlüsseldatei laden".
      2. geeignete Datei auswählen (muss Dateierweiterungsfilter ändern)
      3. Passphrase einfügen
      4. Wählen Sie "privaten Schlüssel speichern".
    2. sonst,
      1. Wählen Sie 'Schlüssel generieren'
      2. Bewegen Sie die Maus zufällig
      3. Wählen Sie "privaten Schlüssel speichern".
      4. Wählen Sie "öffentlichen Schlüssel speichern".
  3. Schicken Sie Ihrem Sysadmin den PUBLIC KEY, nicht den privaten Schlüssel! (sysadmins: siehe unten)
  4. Führen Sie eine Windows-Eingabeaufforderung aus (Start> Ausführen und geben Sie "cmd" ein), und starten Sie "pageant.exe".
  5. Rechtsklick auf das Symbol in der Symbolleiste, 'Schlüssel hinzufügen'
  6. Wählen Sie Ihren privaten Schlüssel aus, den Sie zuvor gespeichert haben, und geben Sie die Passphrase ein
  7. Spachtel starten

    1. in hostname put: Die IP-Adresse Ihres Repository-Servers
    2. Sitzung als ' remote-dev' speichern (beliebiger Name ist in Ordnung)
    3. gehe zu verbindung> proxy
    4. Wählen Sie als Proxy-Typ "local" aus
    5. Proxy-Hostname: Ihr Firewall-DNS-Eintrag oder Ihre IP-Adresse
    6. port: 22(oder was auch immer zu ssh in die Firewall passt)
    7. Benutzername: hg(oder welcher Benutzer der Firewall hat Ihren öffentlichen SSH-Schlüssel in .ssh / authorised_files)
    8. In 'Telnet-Befehl oder lokaler Proxy' ersetzen Sie den Inhalt durch ' FULLPATH\plink.exe -v -nc %host:%port %user@%proxyhost' (beachten Sie den vollständigen Pfad der ausführbaren Datei plink.exe. Beispiel: c: \ plink.exe)
    9. gehe zu verbindung> daten
    10. Benutzername für die automatische Anmeldung: hg (oder bei welchem ​​Benutzer des Repository-Servers ist hg-gateway aktiv)
    11. gehe zurück zu 'session'
    12. Klicken Sie auf "Speichern", um die Sitzung zu speichern
    13. Klicken Sie auf "Öffnen".
    14. Sie sollten so etwas sehen

      Using username "hg". Authenticating with public key "imported-openssh-key" from agent Welcome to XXX code repository server! Your SSH access is restricted by hg-gateway. Summary of repos you have access to: 
  8. Jetzt downloaden und installieren Sie Tortoisehg

  9. Starten Sie Tortoisehg Workbench
  10. Datei> Repository klonen
  11. source: ssh: // remote-dev/ repo-name(remote-dev muss mit dem übereinstimmen, was Sie in Putty als Session bezeichnet haben!)
  12. Ziel: Wählen Sie Ihr lokales Ziel aus
  13. Klicken Sie auf "Klonen".
  14. das ist es.

So erlauben Sie einem Benutzer den Zugriff auf das Remote-Repo:

  1. Fügen Sie den öffentlichen SSH-Schlüssel .ssh/authorized_keysdes Benutzers hgin der Firewall hinzu
  2. Verwenden Sie hg-gatewaydiese Option, um den Schlüssel dieses Benutzers dem hgBenutzer auf dem Server hinzuzufügen

Ein Hinweis: Putty erzeugt tendenziell Schlüssel im .ppk-Format. Sie müssen in einen Einzeiler-SSH-Schlüssel umgewandelt werden. Google ist dein Freund hier.

Annahmen:

  1. In der Firewall befindet sich ein Benutzer mit dem Namen ' hg', dessen .ssh/autorhized_keysDatei die öffentlichen Schlüssel aller Benutzer enthält, die auf das Repository zugreifen müssen
  2. Die Datei / etc / ssh / sshd_config der Firewall enthält eine Zeile ähnlich der folgenden:

    Match Group dev ForceCommand nc -q0 reposerver_ip 22 

    so dass der Benutzer NICHT angeben kann, zu welchen Hosts eine Verbindung hergestellt werden soll. Der Benutzer hggehört offensichtlich zur Unix-Gruppe dev.

Jeder Schritt in Ihrer Antwort funktioniert gut. Können Sie mir helfen, zu verstehen, was Sie in der Zeile "in Firewall 1" zu sagen versuchen: Fügen Sie mit hg-gateway den Benutzerschlüssel dem hg-Benutzer auf dem Server hinzu yellowandred vor 6 Jahren 0
@yellowandred genau das - mit "hg-gateway" können Sie dem jeweiligen Benutzer einen öffentlichen SSH-Schlüssel hinzufügen, sodass Benutzer A nur aus dem Repo ziehen kann, für den er autorisiert ist lorenzog vor 6 Jahren 0