Необходимость доступа к удаленному серверу с открытым ключом

Камнем преткновения, как я уверен, вы знаете, является получение всего значения индексированного массива, когда его имя используется как значение (другой )переменной. Я не мог сделать это с меньшим, чем с промежуточным значением, значение которого становится форматом ${v[@]}, а затем использовать для этого eval. Итак, вот этот подход:

declare -A keys
N=0 # counter for the index variables IX1, IX2, IX3,...
for key in "${!hash[@]}"; do
    value="${hash[$key]}"
    if [ -z "${keys[$value]}" ] ; then N=$((N+1)) ; keys[$value]=IX$N ; fi
    index="${keys[$value]}" # 'index' is now name of index variable
    X="\${$index[@]}"
    eval "$index=( $X $key )" # adding next key to it
done

for value in "${!keys[@]}" ; do
    index=${keys[$value]}
    X="\${$index[@]}"
    printf "Value %s is present with the following keys: %s\n" \
       "$value" "$(eval echo "$X")"
done

Это для Linux bash. Он создает индексированные массивы IX1, IX2и т. д. для различных встречающихся значений и сохраняет эти имена в ассоциативном массиве keysдля значений. Таким образом, ${keys[$value]}— это имя индексированного массива, содержащего ключи для этого значения. Затем Xнастраивается как переменная «фраза доступа» для набора значений, что позволяет eval echo "$X"преобразовывать эти значения с разделением пробелами. Например, если значение имеет индексированный массив IX2, то Xбудет строкой ${IX2[@]}.

Я считаю, что zshпохож на то, что не поддерживает массивы массивов, поэтому, вероятно, потребуется аналогичное решение. ИМХО, фразы доступа в zshнемного понятнее.

0
30.06.2020, 13:04
1 ответ

путаница

ssh -vv -i.ssh/authorized_keys -o PasswordAuthentication=no ansible@192.168.12.2

authorized_keys— это список открытых ключей, которые вы разрешаете подключать.

этот файл должен быть установлен на стороне сервера.

вы должны подключиться, используя свои закрытые ключи, вероятно

ssh -i.ssh/id_rsa ansible@192.168.12.2

шаг 1 (клиент)

подключитесь к 192.168.12.10 с правами пользователя и введите:

mkdir.ssh ; chmod go-rwx.ssh ; cd.ssh
ssh-keygen -t rsa

Принять вариант по умолчанию, не задавать пароль.

Делайте это только один, не делайте этого, если уже есть пара ключей.

если пароль для ansible известен, скопируйте идентификатор файла _rsa.pub, используя

scp id_rsa.pub ansible@192.168.12.2:.ssh/id_rsa_ansible.pub

При первом использовании ssh или scp с 192.168.12.10 на 192.168.12.2 появится диалоговое окно подтверждения.

ansible@192.168.12.2:hosts.ansible
The authenticity of host '192.168.12.10' can't be established.
RSA key fingerprint is 89:dc:fe:d6:4a:40:28:e5:e9:d0:bd:09:28:01:93:23.
Are you sure you want to continue connecting (yes/no)? y

если пароль неизвестен или не установлен, скопируйте строку из id _rsa.pub, используя буфер шпатлевки

шаг 2 (сервер)

Подключиться к 192.168.12.2 с доступом пользователя

mkdir.ssh ; chmod go-rwx.ssh ; cd.ssh

Создать файлы авторизации

cat id_rsa_ansible.pub >> authorized_keys

или скопируйте/вставьте содержимое файла id _rsa.pub из ansible

разрешено _ключи должны:

  • принадлежат либо ansible (, либо root)

    chown ansible authorized_keys
    
  • ansible должен быть только записывающим (rw -r --r--)

    chmod 644 authorized_keys
    

проверка

подключиться к 192.168.12.10 с доступом пользователя

ssh ansible@192.168.12.2

Вы должны подключиться без ввода пароля


У меня уже есть веб-страница с подробным описанием этих шагов (на французском и английском ), вы можете ввести имена пользователей и имена хостов.detail of ssh setup

3
18.03.2021, 23:23

Теги

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