Zaloguj się za pomocą nazwy użytkownika i hasła do systemu Linux FTP

23

Jakie jest polecenie zalogowania się za pomocą FTP wszystkie za pomocą jednej linii?

ftp username:[email protected]

mówi:

Hasło wymagane dla nazwy użytkownika: hasło

Peter Mortensen
źródło
2
Użyj, man ftpaby dowiedzieć się, a może ftp --help. Nie zapominaj, że ftpmoże to oznaczać różne narzędzia ...
Basile Starynkevitch,
2
ftp ftp://username:[email protected]
1
Należy również pamiętać, że wiersz polecenia danego procesu jest widoczny dla wszystkich innych użytkowników w systemie. Dlatego podanie hasła jako części wiersza polecenia może być poważnym problemem bezpieczeństwa.

Odpowiedzi:

8
ftp -nv yourftpserver.com

wtedy user your_username lubuser anonymous


Opublikowałem tę odpowiedź, ponieważ ftp ftp://username:[email protected]nie działała dla mnie.

Usage: { ftp | pftp } [-46pinegvtd] [hostname]
   -4: use IPv4 addresses only
   -6: use IPv6, nothing else
   -p: enable passive mode (default for pftp)
   -i: turn off prompting during mget
   -n: inhibit auto-login
   -e: disable readline support, if present
   -g: disable filename globbing
   -v: verbose mode
   -t: enable packet tracing [nonfunctional]
   -d: enable debugging
użytkownik391339
źródło
2
Nie jest to przydatne, ponieważ wymaga interaktywnego użycia. Równie dobrze mogę wpisać „ftp user @ yourserver”.
smaudet
3
to nie odpowiada na pytanie
phil294
7
ftp ftp://username:[email protected]

Mogłeś jednak z łatwością użyć ftp --help.

Jacek
źródło
25
Wyświetlone polecenie powoduje: „Nieznana nazwa lub usługa”. ftp -help nie produkuje nic z ftp :, // ani nazwa użytkownika: hasło @.
CW Holeman II,
4
Jakiej wersji systemu Linux używasz? Gdy próbuję powyższej składni, pojawia się również „Nazwa lub usługa nieznana”. Używam CentOS 6.
Tim Ludwinski,
7
Dostaję również nazwę lub usługę nie są znane
Kevin Johnson
6
nie działa dla mnie, fyi na zdalnym serwerze ubuntu
użytkownik391339
6
Uznałem również za ftp -help nieprzydatny, a sugerowany przez ciebie format nie działa dla mnie na Ubuntu 16.
Henry
3

Najlepszym rozwiązaniem jest użycie .netrc wraz z czymś takim jak gpg ze względów bezpieczeństwa.

Napisałem do tego skrypt ogólnego przeznaczenia, który mogę przesłać później, ale sprowadza się do:

gpg -c .netrc

lub opcjonalnie z hasłem w wierszu polecenia i miejscem docelowym:

gpg --passphrase <secretphrase> -o .netrc.gpg -c .netrc

Nie pokazano tutaj, ale możesz dodatkowo użyć kluczy asymetrycznych (jeśli masz je skonfigurowane) z gpg, aby uczynić to jeszcze bardziej bezpiecznym.

Następnie, gdy będziesz gotowy do logowania

gpg .netrc.gpg
# or
gpg --passphrase <secretphrase> -o .netrc .netrc.gpg
ftp yourservername
rm .netrc

Przykładowy plik .netrc:

machine google.com
login <username>
password <secretpassword>

Właściwie przechowuję lokalny skrót i oryginalną kopię tych plików na innym komputerze niż ten, na którym używam plików .netrc, i weryfikuję skrót .netrc i skryptu, który uruchamiam, ale to jest powyżej i poza pierwotnym pytaniem PO.

smaudet
źródło
To najlepsza odpowiedź, choć można ją poprawić: (1) dane uwierzytelniające użytkownika w jednym wierszu poleceń będą przechowywane w historii powłoki => problemy bezpieczeństwa. (2) .netrc działa również bez problemów związanych z bezpieczeństwem gpg =>. Sprawdź także, czy plik .netrc ma prawidłowe uprawnienia: chmod 600 .netrc(3) pomocna byłaby funkcja powłoki jako opakowanie wokół odszyfrowywania, wywołania ftp i usuwania odszyfrowanego .netrc. Dziękuję za wspaniałą odpowiedź!
matematyka
Więc zamiast hasła FTP użytkownik musi wpisać hasło GPG? Ponadto, jeśli osoba atakująca ma dostęp do zapisu do twoich plików osobistych, istnieje mnóstwo sposobów ujawnienia twoich poświadczeń, gdy tylko ich użyjesz. W tym scenariuszu GPG naprawdę pomaga tylko atakującemu z dostępem tylko do odczytu. Co jest naprawdę rzadkie?
Konrad
1

Użyj netrc . Jest to lepsze niż podanie hasła w wierszu poleceń.

Nemo
źródło
Ta odpowiedź nie zasługuje na wynik negatywny (choć brakuje w niej przykładu jak to zrobić).
Peter Mortensen
Zgadzam się - jednak nikt tego nigdy nie zmienił (i nie głosowałem za tym).
smaudet
0

Możesz spróbować

my_ftp() {
  ftp -i -n <<EOF
    open $HOST
    user "$USER" "$PASS"
    $@
EOF
}

do którego możesz zadzwonić my_ftp $'ls subfolder\nanothercommand'

To rozwiązanie nie jest interaktywne, ale najlepsze, jakie mogłem wymyślić

phil294
źródło