Wie gebe ich einen Benutzernamen und ein Passwort für wget ein?

157

Ich habe versucht, über wget eine Verbindung zu einem Server herzustellen:

wget http://<user>:<pass>@serveradress

Aber wget antwortet: ungültiger Port

Ich weiß, dass der Server eingehenden Datenverkehr an Port 80 akzeptiert. Wie kann ich dieses Problem beheben?

pschmidt
quelle
Ich glaube nicht, dass Sie den Benutzer zuverlässig verwenden können: pass @ name syntax there; wgethat stattdessen separate Befehlszeilenoptionen für diese, daher wird die Zeichenfolge wahrscheinlich naiv nach der :als Portnummer analysiert .
Geekosaurier

Antworten:

198

Wget wird <pass>@serveraddressals Port interpretiert . Um einen Benutzernamen und ein Passwort angeben, verwenden Sie die --userund --passwordSchalter:

wget --user user --password pass http://example.com/

Von man wget:

--user=user

--password=password

Geben Sie den Benutzernamen Benutzer und Passwort Kennwort für beide FTP- und HTTP - Datei abgerufen werden können . Diese Parameter können mit den Optionen --ftp-userund --ftp-passwordfür FTP-Verbindungen und den Optionen --http-userund --http-passwordfür HTTP-Verbindungen überschrieben werden .

Lekensteyn
quelle
48
Ich bevorzuge die --ask-passwordvon Nabil Kadimi beschriebene Option. Sie müssen das Kennwort unsichtbar in einer anderen Zeile eingeben und vermeiden, es in Ihrem Shell-Verlauf zu speichern.
Kevin
8
@ Kevin Sie können das Speichern im Shell-Verlauf vermeiden, indem Sie die Zeile mit mindestens einem Leerzeichen beginnen (wie von Nabil gezeigt ). Wenn das Kennwort / die Ressource vertraulich ist, sollten Sie sich mehr Gedanken über die unverschlüsselte HTTP / FTP- / Was auch immer-Verbindung machen, als es auf Ihrer Festplatte zu speichern.
Lekensteyn
Ich bin damit einverstanden, dass das Problem mit dem unverschlüsselten Kennwort in einigen Fällen wichtiger ist als der Shell-Verlauf, aber die Antwort ist auch für sichere Protokolle hilfreich. Manchmal müssen Sie sich auch mehr um Spione kümmern, die Zugriff auf Ihren Computer haben, als um Online-Spione (die nicht an den Inhalten interessiert sind, auf die Sie zugreifen oder die Sie nicht interessieren). Die Antwort --ask-password unten ist für die interaktive Verwendung eindeutig besser, während die Antwort --password hier für die Automatisierung einfacher ist. In einigen Fällen ist auch der Kommentar von Ixgr zu .wgetrc und chmod interessant.
Sie
Soweit ich das Handbuch verstehe, wird der Pass nicht als Port interpretiert. Msgstr http://user:password@host/path"" "Sie können Ihren Benutzernamen und Ihr Passwort auch in einer URL verschlüsseln: " "- Handbuch
Tim
104

Sie haben 3 Möglichkeiten und hier gibt es in keiner bestimmten Reihenfolge außer Mutgefühl:

1 / Passwort ist für jeden sichtbar (mit dem Befehl history)

wget --user=remote_user --password=SECRET ftp://ftp.example.com/file.ext

Das Passwort wird auch in ps, top, htop und ähnlichem angezeigt.

2 / Das Passwort ist für jeden sichtbar, der hinter Ihre Schultern schaut

 wget --user=remote_user --password=SECRET ftp://ftp.example.com/file.ext

Beachten Sie den Leerraum vor dem Befehl. Er verhindert, dass er in Ihrem Verlauf gespeichert wird.

Das Passwort wird auch in ps, top, htop und ähnlichem angezeigt.

3 / Das Passwort ist für niemanden sichtbar, auch für Sie

wget --user=remote_user --ask-password ftp://ftp.example.com/file.ext
Password for user `remote_user': [SECRET (not visible)]
Nabil Kadimi
quelle
6
Während es im Verlauf nicht sichtbar ist, ist es für alle sichtbar, die einen Befehl ps, top, htop oder ähnliches ausführen, während der Prozess ausgeführt wird.
4
@AbdennourTOUMI Warum sollten Sie die Zertifikatsprüfung deaktivieren, insbesondere wenn Sie mit der Anforderung ein Kennwort senden? Das ist im Allgemeinen definitiv nicht ratsam. Was das "Verbergen" des Passworts in Protokollen oder / proc betrifft, bietet die wget-Manpage eine zusätzliche Option: "Um zu verhindern, dass die Passwörter angezeigt werden, speichern Sie sie in .wgetrc oder .netrc und schützen Sie diese Dateien vor andere Benutzer mit "chmod". "
lxgr
2
Wenn --ask-passwordnicht verfügbar ist oder Sie das Passwort nicht jedes Mal eingeben möchten, wget -i link.txtkönnen Sie helfen, wo link.txtenthältftp://remote_user:[email protected]/file.ext
tehnicaorg
3

Sie können auch den Benutzernamen und das Kennwort in der Datei speichern ~/.wgetrc und die Berechtigungen dieser Datei so ändern, dass nur Ihr Benutzer sie lesen kann:

Datei ~/.wgetrc:

user=john
password=SEcrEt

... und dann

chmod 600 ~/.wgetrc

Beachten Sie jedoch, dass der Benutzer rootweiterhin in diese Datei hineinschauen und das Kennwort lesen kann.

Aus der Manpage :

Um zu verhindern , die Passwörter aus gesehen zu werden, verwenden Sie die --use-askpassoder speichern sie in .wgetrcoder .netrc, und stellen Sie sicher , dass diese Dateien von anderen Benutzern mit schützen "chmod". Wenn die Passwörter wirklich wichtig sind, lassen Sie sie auch nicht in diesen Dateien liegen - bearbeiten Sie die Dateien und löschen Sie sie, nachdem Wget den Download gestartet hat.

PerlDuck
quelle
0

Sie können Authentifizierungsdaten über --user=USERNAMEund bereitstellen --password=PASSWORD. basierend auf man wgetkann der befehl über die --http-user=USERNAMEund --http-password=PASSWORDfür http verbindung und die --ftp-use=USERNAMEund --ftp-password=PASSWORDfür ftp verbindung überschrieben werden .

Esmaeil MIRZAEE
quelle
-1

Der Befehl hätte --http-userund --http-passwordanstelle von --userund verwenden können --password. Im Falle einer ftpAnfrage sind die Optionen --ftp-userund --ftp-password.

Mradul
quelle
2
Dies ist nicht ganz richtig: man wgetZeigt an, dass --user und --password gültige Optionen sind, die von --http-user oder --ftp-password überschrieben werden können
Charles Green