Multihop mit sshpass

Multihop mit sshpass

Ich möchte mich .ssh/configüber ein Gateway mit einem Host verbinden. Ich möchte keinen RSA-Schlüssel einrichten und muss kein Passwort verwenden. Ich habe diese Art des Hoppings zuvor ohne Passwort durchgeführt. Jetzt versuche ich es mit Passwort.

Ein direkter Befehl, der bei mir funktioniert, ist:

sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip

Ich habe bereits eine Schlüsselauthentifizierung im Gateway eingerichtet und die Details sind in meiner .ssh/config vorhanden. Um dies einzurichten .ssh/config, habe ich Folgendes versucht:

Host h_act
      <username, hostname, port etc.>
      ProxyCommand ssh gateway -W %h:%p
Host h
      ProxyCommand sshpass -p mypassword ssh h_act

Wenn ich es jedoch versuche ssh h, bekomme ich Pseudo-terminal will not be allocated as stdin is not a terminal. Ich habe es -vttmit ssh versucht und bekam komische Nachrichten, aber kein Terminal. Ich weiß, dass eine Kette von ProxyCommand funktioniert, wenn ein netcat/ncoder nur ssh -Wdamit vorhanden ist. Aber hier funktioniert es nicht. Selbst wenn ich den letzten Befehl ohne sshpass versuche, bekomme ich den gleichen Fehler. Ich vermute, es hat mit bestimmten Erwartungen zu tun, die ProxyCommand an den folgenden Befehl hat und die ich nicht erfüllen kann.

Irgendwelche Ideen?

Antwort1

Ich glaube nicht, dass Ihre Konfiguration mit diesem Einzeiler übereinstimmt. Sie sieht eher so aus:

ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip 

d. h. Sie führen sshpasses innerhalb eines ProxyCommand aus.

Aber ich glaube nicht, dass das funktioniert. sshpassDer sshClient wird in ein Pseudoterminal eingebettet, wodurch die Tatsache verborgen wird, dass das Passwort tatsächlich aus einer Datei oder etwas anderem als einer Benutzereingabe von einem Terminal stammt. Dazu muss es ausgeführt werden, bevor der sshClient ausgeführt wird.

Wenn Ihr erster Einzeiler funktioniert, Sie aber keine Lust haben, ihn jedes sshpassMal einzutippen, können Sie ihn in ein Shell-Skript einbinden:

#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"

Führen Sie es dann mit etwas wie aus sshscript myusername@myip.

Verwenden Sie nebenbei nicht sshpass -p, da das Passwort dann in der Ausgabe sichtbar ist, pssolange der sshClient (und sshpass) läuft. Verwenden Sie besser , sshpass -eum das Passwort durch die Umgebung zu übergeben oder sshpass -f filees aus einer Datei zu lesen.

verwandte Informationen