Kann der ProxyCommand von ssh_config einen lokalen Befehl ausführen, bevor eine Verbindung zu einem Remotecomputer hergestellt wird?

11

Bevor ich eine Verbindung zu einem bestimmten Remotecomputer herstellen kann, muss ich einen bestimmten lokalen Befehl ausführen. Also anstatt muss ssh [email protected]ich tun

local_command
ssh [email protected]

Ich möchte dies automatisieren, damit ich es nur tun muss ssh remote.machine.

Ich weiß, dass ich dies auf Shell-Ebene erreichen kann, indem ich ein eigenes sshSkript erstelle , das aufruft /usr/bin/ssh. Kann ich dies jedoch mit der Option ProxyCommand von tun ssh_config?

Soweit ich es verstehe, brauche ich so etwas

Host remote.machine
    ProxyCommand local_command; ssh [email protected]

in meiner ~/.ssh/configAkte, aber nicht genau das natürlich, weil es kreisförmig ist!

Dave Wilding
quelle

Antworten:

9

Wenn Sie verwenden ProxyCommand, müssen Sie so etwas wie /usr/bin/nceine Verbindung zum Server herstellen.

Um Ihren Befehl vor dem Verbinden aufzurufen, müssen Sie sh -c "command list"die beiden Befehle zu einem zusammenführen.

Host remote.machine
    ProxyCommand sh -c "local_command; /usr/bin/nc %h %p"

MEHR:

Wenn Sie local_commandzu kompliziert sind, können Sie ein Skript verwenden:

cat my_connect.sh
#!/bin/bash

local_command
/usr/bin/nc "$1" "$2"

Die SSH-Konfiguration wird:

Host remote.machine
        ProxyCommand /path_to_my_connect.sh %h %p

Zuletzt können Sie dem einen eigenen Proxy hinzufügen /usr/bin/nc

Lai Jiangshan
quelle
1

Verwenden Sie das Beispiel von der Seite, die Sie verlinkt haben:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.1:8080 %h %p

Ruft nc (netcat) auf, um eine Verbindung zu einem Proxy herzustellen (Proxy läuft unter 192.0.2.1:8080) und übergibt% h und% p an den Befehl ssh (% h = Hostname,% p = Port).

Tim
quelle