2013-03-01 2 views
1


Я создал сценарий оболочки, как показано ниже. И мне нужно скрыть пароль, который мне будет предоставлен, когда появится запрос скрипта. Если я запустил сценарий ниже, написанный внутри одиночных кавычек на моей локальной машине, он скроет пароль. Но если я добавлю часть SSH, это не будет.Пароль, скрывающийся в сценарии оболочки

Что мне делать для скрытия пароля?

ssh [email protected] 'echo -n Password:; 
read -s password; 
echo; 
echo $password; 
' 

ответ

4

Попробуйте использовать параметр -t для ssh для принудительного распределения tty.

ssh -t [email protected] 'echo -n Password:; 
read -s password; 
echo; 
echo $password;' 

EDIT: объяснение предлагаемого решения

Если не работает для входа в сеанс, но только команду вместо по умолчанию SSH не будет выделять псевдо терминальное устройство для запущенного процесса. Это поведение не является ошибкой все, но деликатно выбрано по дизайну.

Таким образом можно передавать двоичные данные, не интерпретируемые между различными машинами. Может быть что-то вроде:

ssh [email protected] 'cat remote_file' | local_program 

передачи данных между двумя машинами таким образом, будет почти невозможно, если данные фильтруются драйвером терминала между - подумаешь тоннами управляющих последовательностей вы должны заботиться о!

Без какого-либо выделенного терминала нет возможности скрывать ввод пользователя. Любые попытки stty something потерпят неудачу, так как нет никакого терминала!

Чтобы заставить ssh назначить псевдотерминал, даже если он не запущен в сеансе входа в систему, вам необходимо передать параметр -t, чтобы принудительно назначить tty.

+0

Похоже, я немного потрудился, что происходит. Но все же вход полезен :-) –

0

Лучше использовать ключи SSH, таким образом, нет необходимости передавать пароль с помощью ssh-agent. см. хорошее руководство: https://wiki.archlinux.org/index.php/SSH_Keys

+1

На самом деле мне просто нужно, чтобы скрыть то, что я given.Not специально для password.If есть возможность для ввода банковского счета номер, и если я хочу скрыть его от других, что я должен делать для его скрытия. – user103134

+1

Интересно, почему этот ответ был downvoted –

+1

@sputnick: sry, это было бы мне тогда. Я «ниспроверг» (хороший термин, который я только что узнал), потому что ответ, в то время как определенно хорошая идея управлять одними паролями /s_sh__sh_, все еще не подходит для описанной проблемы: qerying для _any_ типа пароля для шифрования файлов электронной почты или без разницы. Чтобы повторить, убедившись, что это очень хорошее решение проблемы с обработкой ключа ssh, я ответил, что ответ может быть пропущен в отношении данного вопроса. – mikyra

0

Я новичок в сценарии, хотя я предполагаю, что это может может помочь вам:

#!/bin/sh 

echo -n "Enter Password : " 
stty -echo 
read password < /dev/tty 
stty echo 
echo 
echo -n "Enter Password again : " 
stty -echo 
read password1 < /dev/tty 
stty echo 
echo 
echo "Password Entered are : $password and $password1" 
+0

ИМХО это не работает, так как в неинтерактивном режиме не будет никакого псевдотерминала, выделенного на целевой машине, таким образом, 'stty' и параметр' -s' не будут работать. – mikyra

+0

@mikyra: Хотелось бы, чтобы я действительно понял одно из того, о чем вы говорите. Я слишком новичок в LINUX, так что вы можете догадаться о том, насколько я новый для сценариев :-). Я только что узнал эту штуку несколько дней назад, поэтому я подумал, что это может сработать. Я действительно не уверен, просто хотел дать еще один вариант OP, чтобы посмотреть. –

+0

Основываясь на отзывах, я обновил сообщение, сделанное выше, с каким-то обоснованием. Посмотрите туда, если вам все еще интересно. – mikyra

Смежные вопросы