Linux скрипт ввести пароль
Пытаюсь автоматизировать архивирование. На данный момент мне требуется подключаться к удаленным Линуксовым станциям/серверам и забирать оттуда некие файлы. Для этих целей решил использовать SSHFS.
Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить пароль пользователя, но как автоматизировать его ввод я понять не могу. Скажу заранее — авторизацию по ключах сделать не могу по нескольких причинах, которые называть не вижу смысла. Итак, подключаюсь так:
sshfs root@192.168.1.1:/usr/ /mountpoint
- Ввод пароля при помощи Shell скрипта, DeadLoco, 17:34 , 14-Ноя-11, (1)
- Ввод пароля при помощи Shell скрипта, Jinx, 17:51 , 14-Ноя-11, (2)
- Ввод пароля при помощи Shell скрипта, DeadLoco, 17:59 , 14-Ноя-11, (3)
- Ввод пароля при помощи Shell скрипта, DeadLoco, 18:08 , 14-Ноя-11, (4)
- Ввод пароля при помощи Shell скрипта, Jinx, 18:14 , 14-Ноя-11, (5)
- Ввод пароля при помощи Shell скрипта, Jinx, 18:24 , 14-Ноя-11, (6)
- Ввод пароля при помощи Shell скрипта, DeadLoco, 18:32 , 14-Ноя-11, (7)
- Ввод пароля при помощи Shell скрипта, Square, 19:59 , 14-Ноя-11, (10)
- Ввод пароля при помощи Shell скрипта, elvenic, 21:52 , 14-Ноя-11, (11)
- Ввод пароля при помощи Shell скрипта, IgorSapkov, 11:54 , 15-Ноя-11, (12)
- Ввод пароля при помощи Shell скрипта, GTAlex.ru, 13:04 , 12-Фев-13, ( 16 )
> cat «MyVeryStrongPass» | sshfs root@192.168.1.1:/usr/ /mountpoint
Я что-то совсем не понял суть этого действия. cat это читалка файлов, как с его помощью ввести пароль?
> Я что-то совсем не понял суть этого действия. cat это читалка файлов,
> как с его помощью ввести пароль?Кат — далеко не только читалка файлов. Кат — это выводитель в стдаут чего-нибудь. Если что-нибудь — путь к файлу, то выведется содержимое файла. А если что-нибудь — строка, то в стдаут выведется эта строка. Затем мы через перенаправление загоняем эту строку на стдин другой команды. Вуаля.
Нетривиальное использование ката:
# cat > /path/to/the/file.txt
#
Выводим «ничего» в файл. Если кат запустить без аргументов, то он ждет ввода строк или путей с стдина. Если стдин сразу закрыть по КТРЛ-Д, то кат не выведет ничего. Но перед этим он через > обнулит файл вывода. Таким образом удобно чистить длинные логи, которые нежелательно удалять/создавать заново (обычный источник гемора с апачем).
Вот еще один малоизвестный скриптовый трюк:
#!/bin/sh
. . . . .
cat From: root@box
To: user@box
Subject: HELLO
Content-Type: text/plain; charset=»UTF-8″Вы получили это письмо, потому что я не забыл воткнуть пустую строку между телом письма и его хедерами.
ENDOFTEXT
. . . . .> cat «MyVeryStrongPass» | sshfs root@192.168.1.1:/usr/ /mountpoint
Очень плохо понял как это работает — буду еще в маны вчитываться.
Не работает такой способ, по крайней мере у меня не получается. Сначала мне говорит что мол файла или директории под именем «MyVeryStrongPass» (вводил не это) нету, а потом спрашивает пароль на подключение.
> cat «MyVeryStrongPass» | sshfs root@192.168.1.1:/usr/ /mountpoint
Еще пытался вместо MyVeryStrongPass указывать ссылку на файл с паролем — больше не ругалось, но запрос пароля все равно появился.
> Не работает такой способ, по крайней мере у меня не получается.
Ну, попробуйте в скрипте сделать так:
cat MyVeryStrongPass
ENDOFPASS> Возможно-ли такое сделать?
echo ‘password’ | sshfs user@remote.host:/somedir /somemydir -o password_stdin
> Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить
> пароль пользователя, но как автоматизировать его ввод я понять не могу.А вообще-то такие вещи делаются через expect (http://linux.die.net/man/1/expect)
>> Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить
>> пароль пользователя, но как автоматизировать его ввод я понять не могу.
> А вообще-то такие вещи делаются через expect (http://linux.die.net/man/1/expect)Следующий советчик заявит что без девушки-оператора такой вопрос решить нельзя. причем с бюстом не меньше 6.
>>> Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить
>>> пароль пользователя, но как автоматизировать его ввод я понять не могу.
>> А вообще-то такие вещи делаются через expect (http://linux.die.net/man/1/expect)
> Следующий советчик заявит что без девушки-оператора такой вопрос решить нельзя. причем
> с бюстом не меньше 6.Если девушка-оператор-с-бюстом-не-меньше-6 знает как писать скрипты на баше с expect для ввода пароля, я думаю это будет только приветствоваться 🙂
>>>> Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить
>>>> пароль пользователя, но как автоматизировать его ввод я понять не могу.Попробуй утилитку sshpass http://sourceforge.net/projects/sshpass/
>> Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить
>> пароль пользователя, но как автоматизировать его ввод я понять не могу.
> А вообще-то такие вещи делаются через. ssh-agent и аутентификацию по ключу https://www.opennet.ru/tips/1763_ssh_cache_password.shtml , второй вариант — с ControlMaster там тоже описан.
Вот он — новый рабочий день. продолжаем мозговой штурм.
> Ну, попробуйте в скрипте сделать так:
С cat так и не свершилось — у меня постоянно требует пароль, и не важно каким-бы способом я не пытался.
> echo ‘password’ | sshfs user@remote.host:/somedir /somemydir -o password_stdin
Решение то вроди и рабочее, но вот только у меня не прокатило, при попытке подключения пишет следующее:
remote host has disconnected
При включении режима отладки получаю следующее:
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: password
debug1: read_passphrase: can’t open /dev/tty: Device not configured
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: No more authentication methods to try.
Permission denied (publickey,password,keyboard-interactive).
remote host has disconnected
Такое впечатление что пытается использовать ключи, которых нет, после чего пытается использовать пароль, но в итоге ругается что не настроено. Вообще странно, но похоже проблема на стороне машины, к которой подключаюсь.> Если девушка-оператор-с-бюстом-не-меньше-6 знает как писать скрипты на баше с expect для
> ввода пароля, я думаю это будет только приветствоваться 🙂Если девушка-оператор-с-бюстом-не-меньше-6, то мне наверное не до шелла было-бы 🙂
> Попробуй утилитку sshpass http://sourceforge.net/projects/sshpass/
Как я понял для FreeBSD такого нет, толи так глючно работает что лучше считать что его нет.
> . ssh-agent и аутентификацию по ключу https://www.opennet.ru/tips/1763_ssh_cache_password.shtml
> , второй вариант — с ControlMaster там тоже описан.М? А как на счет этого?
> Скажу заранее — авторизацию по ключах сделать не могу по нескольких причинах,
> которые называть не вижу смысла.Почему? Да много вариантов — например религия не позволяет, или я хочу делать бейкапы сайта, к котором доступ по ssh есть, но хостер услугу авторизации по ключах не предоставляет, или, или, или.
Я-же сразу написал что такой вариант не проходит.> А вообще-то такие вещи делаются через expect (http://linux.die.net/man/1/expect)
Признаюсь честно — не знал о существовании expect, и при этом что-то подобное искал уже довольно давно. Спасибо.
Итак, спустя каких-то 5 часов мозгового штурма решение все таки было найдено. Сделал все через expect.
Вот он, мой чудный скрипт:#!/usr/local/bin/expect
spawn -ignore HUP /usr/local/bin/sshfs root@192.168.1.1:/usr/ /mountpoint
expect «*assword*»
send «SuperPass\r»
expect «\n»При чем без «-ignore HUP» в системе творятся вообще странные вещи — после выполнения скрипта диск вроди и подмонтировался, но df диск не видит, а при попытке или открыть точку монтирования, или считать содержимое или отмонтировать, терминал наглухо вис. Больше часа головой об эту проблему бился, но как говорится «Если долго мучится, то что нибудь получится», в итоге история все-же закончилась хеппи ендом.
Скрипт вроди работает нормально, проблем пока не замечено. Всем спасибо за помощь!
>[оверквотинг удален]
> send «SuperPass\r»
> expect «\n»
>> При чем без «-ignore HUP» в системе творятся вообще странные вещи —
> после выполнения скрипта диск вроди и подмонтировался, но df диск не
> видит, а при попытке или открыть точку монтирования, или считать содержимое
> или отмонтировать, терминал наглухо вис. Больше часа головой об эту проблему
> бился, но как говорится «Если долго мучится, то что нибудь получится»,
> в итоге история все-же закончилась хеппи ендом.
> Скрипт вроди работает нормально, проблем пока не замечено. Всем спасибо за помощь!ТЫ ГЕНИЙ!
СПАСИБО ОГРОМНОЕ.> Пытаюсь автоматизировать архивирование. На данный момент мне требуется подключаться к
> удаленным Линуксовым станциям/серверам и забирать оттуда некие файлы. Для этих целей
> решил использовать SSHFS.
> Столкнулся с следующей проблемой — при подключении к удаленной машине требуется вводить
> пароль пользователя, но как автоматизировать его ввод я понять не могу.
> Скажу заранее — авторизацию по ключах сделать не могу по нескольких причинах,
> которые называть не вижу смысла.
> Итак, подключаюсь так:
>> sshfs root@192.168.1.1:/usr/ /mountpoint
а так проходит? sshfs root:пароль@192.168.1.1:/usr/ /mountpoint
>How to provide password to a command that prompts for one in bash?
I’m writing a UNIX shell function that is going to execute a command that will prompt the user for a password. I want to hard-code the password into the script and provide it to the command. I’ve tried piping the password into the command like this:
This may not work for some commands as the command may flush the input buffer before prompting for the password. I’ve also tried redirecting standard input to a file containing the password like this, but that doesn’t work either:
I know that some commands allow for the password to be provided as an argument, but I’d rather go through standard input. I’m looking for a quick and dirty way of piping a password into a command in bash.
Have you looked at autoexpect ? It doesn’t get much easier than that. You just just pass it the command and it will record everything you do and create the expect file for you.
8 Answers 8
How to use autoexpect to pipe a password into a command:
These steps are illustrated with an Ubuntu 12.10 desktop. The exact commands for your distribution may be slightly different.
This is dangerous because you risk exposing whatever password you use to anyone who can read the autoexpect script file.
DO NOT expose your root password or power user passwords by piping them through expect like this. Root kits WILL find this in an instant and your box is owned.
EXPECT spawns a process, reads text that comes in then sends text predefined in the script file.
- Make sure you have expect and autoexpect installed:
sudo apt-get install expect sudo apt-get install expect-dev
man expect man autoexpect
touch testfile.txt sudo chown root:root testfile.txt [enter password to authorize the changing of the owner]
touch myfile.txt autoexpect -f my_test_expect.exp sudo chown root:root myfile.txt [enter password which authorizes the chown to root] autoexpect done, file is my_test_expect.exp
sudo chown el my_test_expect.exp //make el the owner. sudo chmod 700 my_test_expect.exp //make file only readable by el.
set timeout -1 spawn sudo chown root:root myfile.txt match_max 100000 expect -exact "\[sudo\] password for el: " send -- "YourPasswordStoredInPlaintext\r" expect eof
expect my_test_expect.exp spawn sudo chown root:root myfile.txt [sudo] password for el:
ls -l -rw-r--r-- 1 root root 0 Dec 2 14:48 myfile.txt
It worked because it is root, and el never entered a password. If you expose your root, sudo, or power user password with this script, then acquiring root on your box will be easy. Such is the penalty for a security system that lets everybody in no questions asked.
- Ввод пароля при помощи Shell скрипта, elvenic, 21:52 , 14-Ноя-11, (11)
- Ввод пароля при помощи Shell скрипта, Jinx, 18:14 , 14-Ноя-11, (5)
- Ввод пароля при помощи Shell скрипта, DeadLoco, 18:08 , 14-Ноя-11, (4)
- Ввод пароля при помощи Shell скрипта, DeadLoco, 17:59 , 14-Ноя-11, (3)
- Ввод пароля при помощи Shell скрипта, Jinx, 17:51 , 14-Ноя-11, (2)