Как 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, передать зашифрованный пароль в качестве аргумента ожидаемому сценарию и ожидать расшифровки пароля (у меня нет точной механики, разработанной для этого).
Есть ли лучший способ?