Вопрос или проблема
Какой коммандой можно выполнить вход через FTP одной строкой?
ftp username:[email protected]
говорит:
Требуется пароль для username:password
ftp -nv yourftpserver.com
затем user your_username
или user anonymous
Я разместил этот ответ, так как ftp ftp://username:[email protected]
не сработал для меня.
Использование: { ftp | pftp } [-46pinegvtd] [hostname]
-4: использовать только адреса IPv4
-6: использовать IPv6, ничего другого
-p: включить пассивный режим (по умолчанию для pftp)
-i: отключить запросы во время mget
-n: предотвратить автоматический вход
-e: отключить поддержку readline, если она присутствует
-g: отключить соответствие имени файла
-v: подробный режим
-t: включить трассировку пакетов [нефункционально]
-d: включить отладку
Лучший вариант — использовать .netrc вместе с чем-то вроде gpg для безопасности.
Я написал общий скрипт для этого, который, возможно, загружу позже, но суть следующая:
gpg -c .netrc
или дополнительно с паролем в командной строке и указанным местом назначения:
gpg --passphrase <secretphrase> -o .netrc.gpg -c .netrc
Не показано здесь, но вы также можете использовать ассиметричные ключи (если они у вас есть) с gpg для большей безопасности.
Затем, когда вы будете готовы войти
gpg .netrc.gpg
# или
gpg --passphrase <secretphrase> -o .netrc .netrc.gpg
ftp yourservername
rm .netrc
Пример .netrc:
machine google.com
login <username>
password <secretpassword>
На самом деле я храню локальную хэш-сумму и оригинальные копии этих файлов на другом компьютере, чем тот, на котором использую файлы .netrc, и проверяю хэш .netrc и скрипт, который запускаю, но это за пределами изначального вопроса OP.
Вы можете попробовать
my_ftp() {
ftp -i -n <<EOF
open $HOST
user "$USER" "$PASS"
$@
EOF
}
который вы затем можете вызвать с помощью my_ftp $'ls subfolder\nanothercommand'
Это решение не интерактивно, но лучшее, что я смог придумать.
редактировать: Вам, вероятно, лучше просто использовать curl вместо этого.
Используйте netrc. Это лучше, чем выдавать пароль в командной строке.
С curl вы можете указать пользователя и пароль:
curl --user daniel:secret ftp://example.com/download
или:
curl ftp://daniel:[email protected]/download
Вы можете использовать FTP-клиент из NetBSD: https://man.netbsd.org/ftp.1
Он доступен как “tnftp” для некоторых дистрибутивов.
На OpenSuSE он заменил стандартный инструмент FTP.
Dalek:~ # ll /usr/bin/ftp lrwxrwxrwx 1 root root 21 Dec 17 2018 /usr/bin/ftp -> /etc/alternatives/ftp Dalek:~ # ll /etc/alternatives/ftp lrwxrwxrwx 1 root root 14 Jan 17 2020 /etc/alternatives/ftp -> /usr/bin/tnftp
Подключение к FTP
Разместите информацию для входа в ~/.netrc
следующим образом
machine servername.com
login username
password password
Затем подключитесь к нему с помощью lftp
, например
lftp servername.com
Документация https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html
“Файл .netrc содержит информацию для входа и инициализации, используемую процессом автоматического входа.”
Отправка данных на FTP-сервер
Поскольку я хотел бы иметь возможности двусторонней синхронизации между моим ноутбуком и SFTP сервером, я выбираю lftp.
Команда lftp для зеркалирования с ноутбука на удалённый каталог, используйте параметр -R для
обратного зеркалирования.
cd /tmp/repository
lftp ftp.server
mirror -R subdir subdir
quit
Сессия Lftp для зеркалирования с удалённого каталога на ноутбук
mirror subdir subdir
quit
Вы также можете использовать команду в не интерактивном режиме с флагом -e
lftp, закончив её на ; bye
следующим образом:
lftp -e "mirror -R local_dir remote_dir ; bye" ftp.server.com
При использовании флага -c
lftp вам нужно выполнить подключение как отдельную команду сначала:
lftp -c "open ftp.server.com; mirror -R local_dir remote_dir "
Ответ или решение
Чтобы выполнить вход на FTP-сервер с использованием имени пользователя и пароля в Linux, существует несколько эффективных команд и методов, каждый из которых подходит для различных сценариев. Рассмотрим их подробно, чтобы вы могли выбрать наиболее подходящий для ваших нужд.
1. Стандартный FTP
Для простого доступа через FTP, вы можете использовать команду ftp
следующим образом:
ftp username@yourftpserver.com
После выполнения этой команды, вас попросят ввести пароль. Обратите внимание, что передача пароля в открытом виде по этому методу не безопасна.
2. Использование .netrc
Для улучшения безопасности вы можете использовать файл .netrc
, который хранит ваши учетные данные. Вот как создать и использовать его:
- Создайте файл
.netrc
в вашем домашнем каталоге:
nano ~/.netrc
- Вставьте следующие строки, заменив
servername
,username
иpassword
на ваши данные:
machine yourftpserver.com
login username
password password
- Сохраните и закройте файл. Убедитесь, что у файла правильные права доступа:
chmod 600 ~/.netrc
- Затем вы можете просто вызвать команду
ftp
, не вводя учетные данные:
ftp yourftpserver.com
3. Использование curl
curl
— это мощный инструмент для работы с URL, который также поддерживает FTP. Вы можете передать имя пользователя и пароль прямо в командной строке:
curl --user username:password ftp://yourftpserver.com
Или в более компактной форме, используя следующий синтаксис:
curl ftp://username:password@yourftpserver.com
4. Использование lftp
lftp
— это более продвинутый FTP-клиент, который предоставляет дополнительные возможности, такие как работа с множеством протоколов. Чтобы выполнить вход, вы также можете использовать файл .netrc
, как описано выше, или воспользоваться следующей командой:
lftp -u username,password yourftpserver.com
5. Скрипт для автоматизации
Если вам нужно часто выполнять одни и те же команды, вы можете создать небольшой скрипт для автоматизации:
my_ftp() {
ftp -i -n <<EOF
open $HOST
user "$USER" "$PASS"
$@
EOF
}
Затем вы можете вызывать этот скрипт, передавая необходимые команды.
Заключение
Каждый из представленных методов имеет свои преимущества. Использование .netrc
или curl
позволяет обеспечить более безопасный и удобный способ авторизации. Если вы работаете с большими объемами данных и хотите улучшить функциональность, то lftp
будет лучшим выбором. Выбирайте подходящий для ваших нужд метод, учитывая безопасность и удобство использования.
Рекомендуемые ссылки для дополнительного чтения:
Следуя данным рекомендациям, вы сможете безопасно и эффективно работать с FTP-серверами в вашем окружении Linux.