Linux терминал: передать ответ (или значения arg) заранее при установке пакета? - PullRequest
0 голосов
/ 25 апреля 2020

Когда я запускаю команду, подобную ssh-keygen -t rsa -b 2048, она спрашивает меня:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

Я хотел бы заранее написать путь и попробовал так: ssh-keygen -t rsa -b 2048 | cat '/root/.ssh/id_rsa.pub'.

Но это не работает ....

Как я могу это сделать?

1 Ответ

0 голосов
/ 25 апреля 2020

Ваша попытка была обратной, то есть вы пытались передать выходные данные ssh-keygen в cat. Но нам нужно передать вывод cat в ssh-keygen:

# using multiline here doc
$ cat <<EOF | ssh-keygen -t rsa -b 2048
/tmp/id_rsa    
/tmp/id_rsa.pub
password
EOF

ИЛИ

$ echo -e "/tmp/id_rsa\n/tmp/id_rsa.pub" | ssh-keygen -t rsa -b 2048

Но используйте это с осторожностью, это просто подает весь ввод в канал команда. В зависимости от того, как эта команда обрабатывает ввод, может произойти сбой, если ожидаемый ввод отличается от того, что передается по каналу.

Это может подойти для простых скриптов / команд (НЕ будет надежно работать для s sh -keygen во всех случаях [потому что, кажется, в некоторых случаях он порождает другой процесс для запроса ключевой фразы]).

ref. https://tldp.org/LDP/abs/html/here-docs.html для heredo c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...