Вопрос или проблема
Есть ли возможность указать пароль в строке вместе с sftp?
linux~ $ sftp [email protected]:/DIRECTORY_TO_GO_TO/
Как-то так
linux~ $ sftp [email protected]:/DIRECTORY_TO_GO_TO/ -p PASSWORD?
Вообще-то указание пароля в командной строке считается риском безопасности, так как он будет виден всем, кто может выполнить ps/top, и может быть сохранен в истории вашего shell.
Гораздо лучше настроить аутентификацию на основе ключей, если это возможно.
Также, я не думаю, что это будет возможно с sftp. Оно предназначено для безопасных передач. Если вам действительно нужно сделать что-то подобное и у вас нет другого выбора, вам, вероятно, стоит взглянуть на автоматизацию с помощью expect.
Как уже упоминалось, пароль в командной строке должен быть крайней мерой.
Однако, если ничего другого невозможно; можно использовать ssh pass
sshpass -p <password> sftp user@host
Просто используйте perl, ruby или python для написания сценария того, что вы пытаетесь сделать. В случае с ruby это просто (взято из документации API net-sftp):
require 'net/sftp'
Net::SFTP.start('host', 'username', :password => 'password') do |sftp|
# загрузить файл или директорию на удаленный хост
sftp.upload!("/path/to/local", "/path/to/remote")
end
Для получения дополнительной информации http://net-ssh.rubyforge.org/sftp/v2/api/index.html
Не делайте этого – настройте аутентификацию с открытым ключом SSH для автоматического входа.
Для тех, кого не заботит, что пароль может быть виден в команде командной строки:
sftp userid:password@remoteHost
это способ включить пароль в команду sftp
для подключения.
ОБНОВЛЕНИЕ: это оказалось неправильным… см. комментарии
Как указано в других ответах, используйте аутентификацию по открытому ключу. Существует отличная, хотя и немного устаревшая, серия IBM developerWorks, которая должна объяснить все, что вы хотите знать об этом, а также некоторые полезные дополнительные инструменты, такие как keychain.
Я предполагаю, что существует столько ответов, сколько существует клиентов FTP. Сервер SFTP не должен принимать информацию для аутентификации до установления шифрования, чтобы защита пользователя и пароля была обеспечена.
Я полагаю, что клиент FileZilla позволит передавать пользователя и пароль через командную строку… см. документацию здесь. Учитывая репутацию проекта FileZilla, я ожидаю, что он будет работать безопасно.
Как ответили другие, sshpass может быть утилитой, которая вам поможет. Вы можете легко сделать
# Супер важно поставить пробел перед установкой этой переменной, чтобы ваша история командного интерпретатора не сохранила эту строку
export SSHPASS=YOURPASSWORD
# после этого выполните
sshpass -e sftp [email protected]:/DIRECTORY_TO_GO_TO/
Ответ или решение
В мире IT безопасности ввод пароля непосредственно в командной строке считается крайне рискованным действием. Это связано с тем, что команда с паролем может быть легко перехвачена при помощи утилит, таких как ps
или top
, которые отображают запущенные процессы и их аргументы. Кроме того, такая команда может оказаться в истории команд терминала, что делает её доступной для других пользователей системы. Рассмотрим подробнее, как можно использовать SFTP для входа с паролем в одной строке и как это может быть выполнено более безопасными методами.
Теория
SFTP (SSH File Transfer Protocol) — это протокол, использующий SSH (Secure Shell) для безопасного управления файлами и передачи данных. Он разработан для обеспечения высокого уровня безопасности, и, как правило, требует аутентификации при помощи SSH-ключей, что является самым надежным методом. Использование паролей в явном виде снижает безопасность, так как пароли подвержены перехвату.
Пример
Существуют несколько инструментов и подходов для решения задачи однострочного входа с паролем в SFTP.
-
Использование
sshpass
:
sshpass
– это утилита, позволяющая передавать пароль в команды, использующие SSH-соединения. Она была разработана для автоматизации процессов, но при этом сохраняет все указанные раньше риски.sshpass -p 'your_password' sftp [email protected]:/DIRECTORY_TO_GO_TO/
Преимущества: Простота использования и быстрота.
Недостатки: Пароль может появляться в командной строке и истории терминала.
-
Переменные окружения:
Еще одним способом является использование переменной среды для хранения пароля:
# Важно установить пробел перед командой, чтобы предотвратить ее сохранение в истории export SSHPASS='your_password' sshpass -e sftp [email protected]:/DIRECTORY_TO_GO_TO/
Этот метод несколько безопаснее, так как пароль не передается буквально в строке команды. Однако он все равно может быть уязвим для определенных атак.
-
Автоматизация при помощи
expect
:Утилита
expect
позволяет автоматизировать взаимодействие с процессами, включая ввод паролей:#!/usr/bin/expect -f set timeout -1 spawn sftp [email protected] expect "password:" send "your_password\r" interact
Преимущества: Повышенный уровень безопасности по сравнению с
sshpass
, возможность написания сложных скриптов.Недостатки: Требует большего времени на настройку и оптимизацию.
Применение
Рекомендации:
-
Настройка ключей SSH: Вместо ввода пароля в CMD, рекомендуется настраивать аутентификацию на основе ключей SSH. Это обеспечивает многоуровневую защиту данных и создает меньше уязвимостей в системе. Процесс включает создание ключевой пары с последующей регистрацией публичного ключа на сервере назначения. Это гораздо предпочтительней с точки зрения безопасности.
-
Использование
ssh-agent
: Эта утилита позволяет запускать SSH-сессии без постоянного ввода пароля. Она безопасна и удобна, поскольку шифрует подключение пользователя. -
Инструменты и клиенты SFTP: Клиенты наподобие FileZilla предлагают поддержку командной строки с передачей учетных данных. Они могут быть настроены на безопасную работу и поддерживают удобное управление файлами.
Заключение
Хотя возможность однострочного ввода команды с паролем существует, она всегда сопряжена с определенными рисками безопасности. В современных условиях лучшей практикой является отказ от ввода пароля, когда это возможно, и переход на SSH-ключи. Если все же необходимо использовать пароль, следует применять инструменты, минимизирующие любые потенциальные утечки. Любая проблема безопасности должна быть решена комплексно — от обучения пользователей до внедрения надежных системных инструментов, что обеспечит целостность и конфиденциальность ваших данных.