Мне нужно перенести файл журнала на удаленный хост, используя sftp с хоста Linux. Мне предоставили учетные данные для того же от моей операционной группы. Однако, поскольку у меня нет контроля над другим хостом, я не могу генерировать и делиться ключами RSA с другим хостом.
Так есть ли способ запустить sftp
команду (с указанием имени пользователя и пароля) из скрипта Bash через задание cron ?
Я нашел похожий вопрос переполнения стека: Укажите пароль для sftp в скрипте Bash , но удовлетворительного ответа на мою проблему не было.
SSHPASS=password sshpass -e ...
стоит сделать.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
был решающим недостающим элементом для меня.Другой способ - использовать lftp:
Недостаток этого метода заключается в том, что другие пользователи на компьютере могут читать пароль из подобных инструментов,
ps
и этот пароль может стать частью истории вашей оболочки.Более безопасная альтернатива, доступная с LFTP 4.5.0, - установка
LFTP_PASSWORD
переменной среды и выполнение lftp с помощью--env-password
. Вот полный пример:LFTP также включает в себя классную функцию зеркалирования (может включать удаление после подтвержденной передачи
--Remove-source-files
):источник
put-script
:open sftp://user:password@host; put local-file.name; exit
чем запустить.lftp -f put-script
Таким образом, вам не нужно указывать имя пользователя и пароль в командной строке, и вы можете установить ограничительные разрешения для вашего файла сценария.lftp
чем возиться сsftp
иsshpass
. Хороший ответ.Expect - отличная программа для использования.
В Ubuntu установите его с помощью:
На компьютере CentOS установите его с:
Допустим, вы хотите подключиться к серверу sftp, а затем загрузить локальный файл с локального компьютера на удаленный сервер sftp.
Это открывает sftp-соединение с вашим паролем к серверу.
Затем он переходит в каталог, куда вы хотите загрузить свой файл, в данном случае «logdirectory»
Это загружает файл журнала из локального каталога, который находится в / var / log / с именем файла file.log, в «logdirectory» на удаленном сервере.
источник
Вы можете использовать lftp в интерактивном режиме в сценарии оболочки, чтобы пароль не сохранялся в .bash_history или подобном, выполнив следующие действия:
Добавьте следующее в ваш файл:
И напишите / выйдите из редактора vi после того, как вы отредактируете host, user, pass и каталог для ввода
:wq
введенного файла. Затем сделайте ваш скрипт исполняемымchmod +x test_script.sh
и выполните его./test_script.sh
.источник
Меня недавно попросили переключиться с ftp на sftp, чтобы обеспечить передачу файлов между серверами. Мы используем пакет Tectia SSH, в котором есть возможность
--password
передать пароль в командной строке.пример :
sftp --password="password" "userid"@"servername"
Пакетный пример:
Я подумал, что должен поделиться этой информацией, так как я просматривал различные веб-сайты перед запуском команды help (
sftp -h
) и был удивлен, увидев параметр пароля.источник
ps
ввести пароль в командной строке, и любой пользователь системы, выполняющей команду, сможет увидеть ваш пароль.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Вы можете переопределить, включив аутентификацию без пароля. Но вы должны установить ключи (pub, priv), прежде чем идти на это.
Выполните следующие команды на локальном сервере.
Нажмите клавишу ВВОД для всех предложенных вариантов. Нет необходимости вводить значения.
Подключитесь к удаленному серверу, используя следующую команду
Выполните следующие команды на удаленном сервере
Выполните следующую команду на локальном сервере, чтобы проверить аутентификацию без пароля. Он должен быть подключен без пароля.
источник
lftp -p ${port} -u ${login_id},${password} ${ip_number}
при вызове из сценария оболочки печатать их где-нибудь? Как вы решили помимо sshpass?lftp
и полагаюсь наsshpass
Mac и Linux оба.Объедините sshpass с заблокированным файлом учетных данных, и на практике он так же безопасен, как и все остальное - если у вас есть root на коробке для чтения файла учетных данных, все ставки в любом случае отключены.
источник
Программа Bash, ожидающая, пока sftp запросит пароль, и отправит его вместе:
Вам может потребоваться установить ожидаемый, измените формулировку «Пароль» на строчную букву «p», чтобы соответствовать тому, что получает ваш запрос. Проблема здесь в том, что он предоставляет ваш пароль в виде обычного текста в файле, а также в истории команд. Который почти побеждает цель иметь пароль во-первых.
источник
Вы можете использовать sshpass для этого. Ниже приведены шаги
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
источник