TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #343 1.15K
Скрипт для массового обновления SSH-ключей пользователей на кластере

Когда у вас десятки серверов и несколько пользователей, ручное обновление ~/.ssh/authorized_keys превращается в кошмар. Чтобы централизованно обновить ключи (например, при ротации), скрипт может взять все под контроль.

Наш скрипт будет:

📍Хранить эталонные ключи пользователей в центральном репозитории (например, /srv/ssh-keys/ или в Git).
📍Проходить по списку хостов и обновлять authorized_keys.
📍Логировать успехи и ошибки.


🛠 Пример скрипта


#!/bin/bash

HOSTS="hosts.txt" # список серверов: один hostname/ip на строку
USERS="users.txt" # список пользователей: один user на строку
KEYDIR="/srv/ssh-keys" # где лежат эталонные ключи (user.pub)
LOGFILE="ssh_update.log"

while read -r host; do
echo "[*] Обновляем ключи на $host"
for user in $(cat "$USERS"); do
keyfile="$KEYDIR/$user.pub"
if [[ -f "$keyfile" ]]; then
ssh "$host" "mkdir -p /home/$user/.ssh && \
chmod 700 /home/$user/.ssh && \
cat > /home/$user/.ssh/authorized_keys && \
chmod 600 /home/$user/.ssh/authorized_keys && \
chown -R $user:$user /home/$user/.ssh" \
< "$keyfile"

if [[ $? -eq 0 ]]; then
echo "$(date '+%F %T') OK $user@$host" >> "$LOGFILE"
else
echo "$(date '+%F %T') FAIL $user@$host" >> "$LOGFILE"
fi
else
echo "Нет ключа для $user"
fi
done
done < "$HOSTS"


▪️ Что делает скрипт

📍перебирает все хосты из hosts.txt;
📍для каждого пользователя заливает новый authorized_keys;
📍выставляет правильные права (700 для .ssh, 600 для ключа);
📍пишет лог успешных и неудачных обновлений.

BashTex 📱 #bash
  • 👍 12
More from @bash_tex
  1. Oct 9, 2026BashTex 📱 #мем
  2. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  3. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  4. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  5. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  6. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →