Проверьте, очищает ли что-то выполнение Ваш PS1
огибающая переменная.
Как пример на другой машине, не затронутой той проблемой, если Вы работаете
PS1=""
в оболочке удара Вы получите тот же вывод своих снимков экрана.
Я не хочу использовать ssh без пароля, так как мой файл секретных ключей может быть поставлен под угрозу, который еще хуже.
Нет, это неправильно. Файл секретных ключей обеспечивает больше безопасности, чем пароль. Используйте файл секретных ключей. Файл секретных ключей шифруется с паролем; если кто-то получает файл ключей, им все еще нужен Ваш пароль. Если бы Вы использовали аутентификацию по паролю, то любой овладевающий паролем был бы дома свободный.
Выполненный ssh-agent
на время Вашей сессии. Прежде чем Вы будете использовать конкретный ключ, будете вводить пароль с ssh-add
(или посредством некоторой подсказки GUI). Затем не будет подсказки при соединении использования этого ключа.
Существует ли способ скопировать, ssh, и выполнить команду на удаленной машине с одним паролем?
Существует два пути, варьирующиеся по их удобству и компромиссам.
Нужно передать встроенный файл. Вы должны ввести кроме содержания файла? В противном случае ssh example.com 'cat > the_file ; process the_file' < the_file
сделает то, что Вы хотите.
Другой должен сделать что-то, что это снова использует соединение SSH. ControlMaster
и друзья для ssh могли бы помочь - посмотрите ssh_config(1)
для получения дополнительной информации или существуют различные обертки или реализации SSH для различных языков программирования та справка.
Также, как записать сценарии, которые должны взаимодействовать с пользователем для ввода паролей?
Считайте его из TTY. Обычно лучшая стратегия состоит в том, чтобы позволить ssh взаимодействовать непосредственно с пользователем и не мешать, потому что этому протестировали намного лучшее и проверило реализацию взаимодействия таким образом.
Я не хочу использовать чтение, поскольку это не безопасно.
Для взаимодействия с пользователем я предполагаю. Это существенно не отличается в безопасности от просто разрешения SSH спросить, на самом деле, но это идеально, чтобы просто остаться вне пути.
Я не хочу использовать ssh без пароля, так как мой файл секретных ключей может быть поставлен под угрозу, который еще хуже.
... и я предполагаю, что агент SSH не приемлем ни один приблизительно по той же причине.
Используя 'ожидают', какой Вы просите, возможно, и некоторые люди все еще используют его. Ожидать сценарий может 'поймать' вывод команд, и можно 'ответить' на основе их вывода. Ваш сценарий будет похож:
spawn scp some_file user@host:/destination
expect "*?assword:*"
send -- "Your Super Secret Password Here\r"
send -- "\r"
Конечно, это работало бы, но это повысится другая проблема. Ваш пароль будет сохранен в форме простого текста, и любой читающий этот файл смог бы видеть Ваш пароль.
Мое личное мнение - то, что самым безопасным неинтерактивным путем является аутентификация с закрытым ключом.
Вы могли использовать ssh
ключи, но присваивают их пользовательскому пользователю в удаленной системе, оболочка которой установлена не на фактическую оболочку, но команду, которую Вы хотите выполнить. Эффект будет после входа в систему, что команда выполняется, и затем терминал закроется. Таким образом, если затем пароль поставлен под угрозу, они не могут в интерактивном режиме ввести команды, но только выполнить один набор команд как оболочку.