Копирование ключа в /root/.ssh/authorized _ключи

Bash также завершает работу, когда заканчивается ввод для чтения. Это может произойти несколькими способами, наиболее распространенными из которых являются чтение последней строки сценария оболочки, ввод пользователем control -D или... закрытие окна терминала.

(Вы также можете попробовать bash -i < /dev/nullи заметить, как он немедленно завершает работу, потому что у него закончились входные данные ).

-1
18.03.2021, 19:41
1 ответ
sudo cat >> /root/.ssh/authorized_keys

Эта команда не будет делать то, что вы думаете.

Оболочка (, работающая под обычным пользователем ), реализует перенаправление еще до того, как начнет выполнять команду sudo cat. В результате перенаправление происходит от имени пользователя, не являющегося -root, у которого явно не будет прав на запись в файл authorized_keysroot.

Стандартный обходной путь — использовать вместо этого команду teeс sudo:

#!/bin/bash

for i in $(cat hosts)

do cat team.keys | sshpass -f pass ssh -t -o "StrictHostKeyChecking no" \ 
    normal_user@ad@${i} "sudo tee -a /root/.ssh/authorized_keys >/dev/null"

done

В этой версии удаленная оболочка, запущенная как normal_user@ad, будет выполнять команду как sudo <some parameters for sudo> >/dev/null, а команда sudoполучит root-доступ и выполнит tee /root/.ssh/authorized_keys.

Команда teeполучит ключи, передаваемые по конвейеру из стандартного ввода, и запишет одну копию своих входных данных в файл /root/.ssh/authorized_keys, что она может сделать, поскольку работает от имени пользователя root, и передаст другую копию в стандартный вывод.. Дополнительная копия возвращается к первой удаленной оболочке, запущенной как normal_user@ad, которая затем отправит ее на /dev/null.

3
18.03.2021, 22:24

Теги

Похожие вопросы