
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 -vtt
mit ssh versucht und bekam komische Nachrichten, aber kein Terminal. Ich weiß, dass eine Kette von ProxyCommand funktioniert, wenn ein netcat/nc
oder nur ssh -W
damit 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 sshpass
es innerhalb eines ProxyCommand aus.
Aber ich glaube nicht, dass das funktioniert. sshpass
Der ssh
Client 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 ssh
Client ausgeführt wird.
Wenn Ihr erster Einzeiler funktioniert, Sie aber keine Lust haben, ihn jedes sshpass
Mal 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, ps
solange der ssh
Client (und sshpass
) läuft. Verwenden Sie besser , sshpass -e
um das Passwort durch die Umgebung zu übergeben oder sshpass -f file
es aus einer Datei zu lesen.