Безопасный способ использовать пароль в Bash и ожидать - PullRequest
0 голосов
/ 28 августа 2018

Как bash может безопасно вызвать ожидающий скрипт с паролем?

У меня есть два сценария: сценарий bash, который непосредственно выполняется пользователем, и сценарий ожидания, который вызывается сценарием bash и который входит в систему на удаленном хосте с паролем, предоставленным в сценарии bash.

bash script (main.sh)

#!/bin/bash

read -p "User: " user
read -s -p "Password: " password

./login.expect "$user" "$password"

сценарий ожидаемого (login.expect)

#!/usr/bin/expect --

set user [lindex $argv 0]
set password [lindex $argv 1]
set host 192.168.1.15

spawn ssh $user@$host
expect -re ".*ssword.*" { send "$password\n" }    # Send password
expect -re ":~\\\$" { send "ls\n" }               # Do stuff
expect -re ":~\\\$" { send "exit\n" }             # exit

По крайней мере, одна проблема с этой настройкой состоит в том, что кто-то может узнать пароль, наблюдая за процессами с помощью «ps -ef», так как пароль предоставляется в командной строке.

Эти сценарии значительно упрощены по сравнению с моими настоящими сценариями, так как я просто пытаюсь понять, может ли эта часть быть выполнена безопасным образом каким-либо образом. Мой фактический сценарий использования очень сложен и требует, чтобы сценарии bash и ожидали, что они разделены, поэтому я не могу просто встроить ожидаемое в bash и не могу запросить пароль из ожидаемого сценария. Также, к сожалению, ключи ssh не являются опцией для входа без пароля. Я мог бы реструктурировать ожидаемый сценарий так, чтобы он принимал пароль не так, как параметр командной строки, но я не уверен, что будет хорошей альтернативой.

Мой лучший вариант сейчас - зашифровать пароль в bash, передать зашифрованный пароль в качестве аргумента ожидаемому сценарию и ожидать расшифровки пароля (у меня нет точной механики, разработанной для этого).

Есть ли лучший способ?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете несколько надежно передать пароль через среду, так как он может быть прочитан только тем же пользователем и пользователем root. В оболочке export password и в скрипте expect

set password $env(password)
...