Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Популярная настольная игра

Длинные Нарды Турнир

Настольные, Мидкорные, Для двоих

Играть

Топ прошлой недели

  • Oskanov Oskanov 9 постов
  • Animalrescueed Animalrescueed 46 постов
  • AlexKud AlexKud 33 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
23
GwaliorSVT
GwaliorSVT
14 дней назад
Общественный транспорт
Серия Историческая серия

Пассажирский транспорт СССР⁠⁠

"Техника - молодёжи" №1-12 за 1986 г.

Показать полностью 12
Техника-молодёжи Автобус Троллейбус Метро Общественный транспорт Трамвай Длиннопост
0
5
Trolly
Trolly
18 дней назад
Общественный транспорт

Проезд в общественном транспорте Екатеринбурга подорожает⁠⁠

С 1 ноября 2025 года стоимость одной поездки составит 42 рубля.

При этом для горожан, активно пользующихся общественным транспортом, городские власти предусмотрели несколько способов экономить на транспортных расходах.

При оплате проезда по Qr-коду, стоимость поездки составит 33 рубля вместо 42. Скидка в размере 9 рублей при оплате через Систему быстрых платежей действует до 31 декабря этого года.

Для экономии можно будет купить проездной, который будет действовать на всех видах транспорта (метро, автобус, трамвай, троллейбус), а стоимость его составит 1500 рублей в месяц для физических лиц. Для юридических лиц – 2000 рублей.

Отменяются проездные на 70, 40 и 20 поездок, с 15 октября их приобрести уже нельзя. Если у пассажиров уже куплен такой проездной, он будет действовать до тех пор, пока не будут израсходованы все поездки или не закончится срок действия такого проездного.

Отдельным категориям граждан (пенсионерам, ветеранам боевых действий, инвалидам, ветеранам труда и другим категориям граждан) можно приобрести безлимитный месячный проездной билет на три вида транспорта (автобус, трамвай, троллейбус), стоимость которого составит 900 рублей. Кроме того, можно будет приобрести проездной билет на 4 вида транспорта (метро, автобус, трамвай, троллейбус) с лимитом не более 50 поездок стоимостью 500 рублей. Разовая поездка для граждан, имеющих соответствующие льготы, составит 24 рубля.

Пруф - https://екатеринбург.рф/жителям/транспорт/новые_тарифы

Показать полностью
Екатеринбург Общественный транспорт Проезд Проездной Транспорт Трамвай Автобус Метро Троллейбус Текст
10
8
DmitriitheFals
1 месяц назад
Лига Сисадминов
Серия Кудахтеры: Ansible

Ansible для детского сада. Часть 4. Первичная настройка конечного клиента⁠⁠

У меня постоянное ощущение того, что я описываю не велосипед с костылями, а велосипед, который давно изобретен, на котором все катались лет 15 назад, если не 20. Что-то типа «введение в линукс и все вокруг для 10 класса». Что на информатике учат.
Теперь еще и форматирование при оформлении слетает, хотел быстренько выложить, пока обед, а придется потратить полчаса.

Для лиги лени: много примеров, как делать не надо, и как точно не работает
Ansible для детского сада в скольки то частях. Часть 1.Про все сразу
Ansible для детского сада в скольки то частях. Часть 2. Костылируем жалкое подобие WSUS - Linux Server Update Services (LSUS)
Ansible для детского сада. Часть 3. Настраиваем подобие безопасности и все остальное
Подготовка Git

Ansible для детского сада. Часть 4. Первичная настройка конечного клиента
4.1 Теоретически все просто
4.2 Сначала готовим открытую часть сертификата без пароля через Putty в Windows и еще раз вспоминаем что генерирует Putty в Windows, а что нужно в ssh
4.3 Детский скрипт, и как не надо делать
4.4 Отлаживаем SSH, снова и опять
4.5 Проблемы с переносом строки и не только
4.6 Проверяем, что получилось
4.7 Почти переходим к второму Ansible плейбуку
4.8 Воюем с пробелами в Anisble и восстанавливаем пример из первой статьи
4.9 Возвращаемся к основной задаче

Ansible для детского сада в скольки то частях. Часть 5. Приделываем костыли

Ansible для детского сада. Часть 4. Первичная настройка конечного клиента

В предыдущей части оказалось, что в системе есть узкое место – первичная настройка.

4.1 Теоретически все просто:

пишем отдельный плейбук типа такого: Reddit Creating System Users for Ansible Execution

# From a clean system with root ssh access:
# - Install sudo
# - Add the ansible user
# - Enable wheel group for sudo

- name: add wheel group
group:
name: wheel
state: present

- name: add ansible user
user:
name: ansible
groups: wheel
password: "{{ ansible_become_password }}"
createhome: yes
home: /var/local/ansible
state: present
shell: /bin/bash
uid: 20000

- name: install sudo
apt:
name: sudo
state: installed
when: ansible_os_family == 'Debian'

- name: configure sudoers
lineinfile:
dest: /etc/sudoers.d/ansible
line: "%wheel ALL=(ALL) ALL"
state: present
create: yes
validate: 'visudo -cf %s'
owner: root
group: root
mode: 0440

- name: create ansible user authorized_keys file from id_ed25519
authorized_key:
user: ansible
manage_dir: no
path: /etc/ssh/ansible
key: "{{ lookup('file', ansible_ssh_key) }}"

Практически это означает ручную настройку для рута «еще раз». Как раз этого хочется избежать, потому что в том же Debian по умолчанию ssh для root закрыт. Изменить настройку можно. Но не нужно.

4.2 Сначала готовим открытую часть сертификата без пароля через Putty (PUTTYGEN) в Windows и еще раз вспоминаем что генерирует Putty в Windows, а что нужно в ssh

Это все помнят, но необходимо повторить еще раз.

По результатам опытов и вопросов «что ж не работает то» ключ я сделал на целых 4096 бит, а вовсе не по умолчанию в 2048. Вроде бы, должно и так работать, но ведь нет!

Когда PUTTYGEN генерирует пару ключей, открытый и закрытый ключ, то мы получаем два файла.

В моем примере:

ex1_public.pkb – файл с открытым ключем. Можно было сделать без расширения, значения это не имеет
ex1_private.ppk – файл с закрытой частью ключа.
ex1_public выглядит как:

---- BEGIN SSH2 PUBLIC KEY ----

Comment: "key-4-pikabu"

AAAABС(длинный ключ)

---- END SSH2 PUBLIC KEY ----

ex1_private.ppk выглядит как:

PuTTY-User-Key-File-3: ssh-rsa

Encryption: none

Comment: key-4-pikabu

Public-Lines: 6

AAAABС (длинный ключ на 6 строк, он же лежит в ex1_public.pkb)

Private-Lines: 14

AAABAF(длинный ключ)A==

Private-MAC: f(длинная последовательность)

если вы нажимали еще какие-то кнопки и настройки, то могут встречаться строки типа:

Key-Derivation: Argon2id

Argon2-Memory: 8192

Argon2-Passes: 34

В /home/user/.ssh/ authorized_keys лежит только строка из открытого ключа в формате:

ssh-rsa AAAABС.. (и так далее) вплоть до конца строки.

PUTTYGEN так и показывает , КАК НАДО.

4.3 Детский скрипт, и как не надо делать

Перепишу все, что выше, обратно в ssh \ bash:

В процессе отладки выяснилось, что есть такое ограничение, как регистр имени пользователя в Linux, описанное как
User/group names must match [a-z_][a-z0-9_-]*[$],

то есть можно и нужно было посмотреть в тот же chkname.c., и увидеть там

* is_valid_user_name(), is_valid_group_name() - check the new user/group

дебиан сорцы, наведение через ЖЖ - Формат имени пользователя в Linux.

Поэтому, сделать

username=Ansible1

можно, и даже пароль ему поставить можно, но потом разбираться с chmod\chown для \home\ Ansible1\.ssh – это какой-то совсем не очевидный процесс. Хотя при входе с паролем такое имя пользователя работает, но разбираться еще и с этим в рамках статьи было лень, и, значит, пусть все будет строчное.

username=ansible1

/usr/sbin/useradd -m -s /bin/bash "$username"

# как не надо изобретать свои костыли

# Superrandom1=$RANDOM*$RANDOM+$RANDOM-$RANDOM*$RANDOM

# это строка, и математика так не сработает. Это и не важно

# PASS1=$(echo -n $Superrandom1 | sha256sum)

# echo $PASS > ps1.txt

# echo ${PASS:0:64} > ps2.txt

# PASS2=`date`

# PASS3=${PASS2:0:3}-${PASS:0:60}

#PASS2=${PASS:0:61}

# echo -e $PASS2\n$PASS2 | passwd "$username"

# так не работает, потому что в sha256sum попадаются простые сочетания.# echo $PASS3

# echo $username:$PASS3 | /usr/sbin/chpasswd #тут почему-то denied

PASS4=`cat /dev/urandom | fold -w 32 | head -n 1`

echo $username:$PASS4 | /usr/sbin/chpasswd

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

Добавлю группу и юзера в группу

groupname=ans_demo1

/usr/sbin/groupadd $groupname

/usr/sbin/usermod --append --groups $groupname $username

Теперь sudoers для группы:

mkdir -p /etc/sudoers.d

и дальше

curl --header "PRIVATE-TOKEN: glpat-norDQhvwoTxyAtM9ANhV" http://192.168.1111.2222/api/v4/projects/2/repository/files/ansible/raw?ref=main -o /etc/sudoers.d/ansible

где 2 – ID проекта, а токен ваш токен. Токен в примере выше я сменил, и это токен из домашней лабы, и с этим токеном не так много можно увидеть даже в домашней лабе. Можно увидеть открытую часть ключа, и метод генерации случайного пароля.

Содержание sudoers.d/ansible

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

## Allows people in group wheel to run all commands

%ans_demo1 ALL=(ALL) ALL

## Same thing without a password

%ans_demo1 ALL=(ALL) NOPASSWD: ALL

и остается сделать только

curl --header "PRIVATE-TOKEN: glpat-norDQhvwoTxyAtM9ANhV" http://192.168.1111.2222/api/v4/projects/2/repository/files/authorized_keys/raw?ref=main -o /home/$username/.ssh/authorized_keys --create-dirs

Думали все так просто? Ничего подобного. Так работать без дополнительной магии не будет.

4.4 Отлаживаем SSH, снова и опять

Эти пара абзацев написаны после того, как в разделе 4.9 ничего не заработало, потому что я попросту забыл настроить права на файл. Вроде, столько раз делал, и опять забыл.

По результатам перегенерации всех паролей и настроек я имею:

Локально, на ПК с Windows,
Было ex1_public.pkb, стало pikabu_part4_public – файл с открытым ключем. Расширение значения не имеет
Было ex1_private.ppk, стало pikabu_part4_private.ppk - файл с закрытой частью ключа.

Это два текстовых файла. Конечно, лучше бы файл с закрытой частью ключа хранить на зашифрованном разделе, или в волте, или как-то еще, «закрыто».

Файл pikabu_part4_export4ssh. Это экспорт файла для ssh, потом будет нужен.
В гите, в файле authorized_keys, лежит, в одну строку, длинная строка с началом

ssh-rsa AAAAB… и окончанием == и какой-то комментарий, который вы сами пропишете при создании ключа.

Поскольку дело происходит в Debian, то речь про
tail -f /var/log/auth.log – не идет, а в
journalctl -ru ssh | grep 'Could not open user' -
будет
Could not open user 'Ansible1' authorized keys '/home/Ansible1/.ssh/authorized_keys': Permission denied

В интернетах пишут: сделайте chmod да chown, и будет вам радость да счастье. Возьму да сделаю!

chmod 600 /home/ansible1/.ssh/authorized_keys
chmod 700 /home/ansible1/.ssh/
chown ansible1 /home/ansible1/.ssh/ -R
systemctl restart ssh.service

Про вот такое еще пишут знающие люди в интернетах, но я пожалуй, воздержусь.

chown ansible1:ans_demo1 /home/ansible1/.ssh –R

И вот замечу я, что когда все буковки в имени пользователя стали маленькие, то волшебным образом все заработало. А пока user был Ansible1, то есть с большой буквы, то сделав

passwd Ansible1

все работало, а через ssh – нет. И магия это мне не понятна, поскольку и ключи я переделал, и все переписал, и три раза перегрузил, а ишь ты – не работало, и хоть ты что делай.

Потому делал я всякое непотребное,
pkill -KILL -u ansible1
и
/usr/sbin/deluser ansible1

и неоднократно.

4.5 Проблемы с переносом строки и не только

Если вы копипастите из винды \ текстового файла (в формате винды с переносом строки и возвратом каретки), и потом тащите этот файл в git, и потом на Linux машину, не забудьте сменить формат переноса строки через

sed -i 's/\r$//' filename

Потому что иногда так получается, что скрипт в две строки, из примера в третьей части, работает нормально. Вот такой еще работает,

#!/bin/bash
date

А что-то длиннее начинает ругаться на
command not found
или
unexpected token `newline

Прям печаль и беда. Что остается? Костыли.

curl --header "PRIVATE-TOKEN: glpat-norDQhvwoTxyAtM9ANhV" http://192.168.1111.2222/api/v4/projects/2/repository/files/second.sh/raw?ref=main -o ansible4.txt && sed -i 's/\r$//' ansible4.txt && bash ansible4.txt

Конечно, правильнее хранить токены не в коде, а в vault. Но если у этого токена доступ только к этому проекту, то .. и так сойдет.
И, конечно токен не стоит хранить в коде, а имеет смысл передавать как параметр в командной строке. Или нет.

4.6 Проверяем, что получилось

Во первых. Оказалось, что я забыл установить пакет sudo. Нет его в Debian12 и Debian 13 by Proxmox. Не забудьте дописать
Во вторых. Оказалось, что я на одном из хостов не прописал Nexus в /etc/apt/sources.list, отчего обновления не шли. Тоже не забывайте.
В третьих. На одном хосте словил: bash: curl: command not found
Потому что curl там лежит, почему-то, только в:
/usr/share/bash-completion/completions/curl
/usr/lib/python3/dist-packages/curl

как это в одном дебиане работает, в другом нет, я даже не пытаюсь понять. Поэтому:
сначала nano /etc/resolv.conf (где у меня с времен тестов SSSD прописан DNS от AD DC), потом

apt install curl -y

Итого я забыл:

apt install curl -y
apt install sudo -y

заменить или исправить /etc/resolv.conf
заменить или исправить /etc/apt/sources.list. Причем, при использовании Nexus, это будут разные sources.list.

Или нет ? Прописать то я могу что угодно.
Отредактировать /etc/ssh/sshd_config – для входа только по сертификату, сделать PasswordAuthentication no

И про велосипед.

Вопрос «что лучше, исправить или заменить» - мне не ясен. И та и другая операция приводит к одному виду, а что «правильнее» ?

В скрипте выше в строке
PASS4=`cat /dev/urandom | fold -w 32 | head -n 1`
возникают ошибки
ansible4.txt: line 17: warning: command substitution: ignored null byte in input
Да и путь -o ansible4.txt правильнее переписать как -o ~/ansible4.txt, но опять же, если это все работает не от рута, потому что у рута домашняя директория (~) вовсе не /home/user.

И что с этим делать, мне тоже не понятно. То есть, мне то понятно, ничего не делать.
Осталось удалить созданную в ходе опытов директорию ''$'\r'?. Оказалось, что проще всего ее сначала переименовать, иначе удаление делает некоторые фокусы, особенно если сделать rm $'*

Еще от влияния переноса строки образовалась не только \home\Ansible1, но и:
'Ansible1'$'\r' и 'Ansible1'$'\r\r'
И в скрипт можно бы и дописать, rm ansible5.txt.
Или даже и apt update && apt upgrade -y, вдруг забыл кто-то, кто систему ставил, сделать сразу же после настройки /etc/apt/sources.list.

4.7 Почти переходим к второму Ansible плейбуку

Вначале было слово, потом был вообще не плейбук, а команда
ansible proxmox -m setup -a "filter=ansible_uptime_seconds" --ask-pass

Первый плейбук, /home/user/uptime_report.yml, описан в первой статье, как и перечень хостов к нему,/home/user/1st_hosts.ini.
Итоговая команда была:

ansible-playbook uptime_report.yml --ask-pass --user root --inventory /home/user/1st_hosts.ini

При этом, я еще и умудрился файл uptime_report.yml сломать. Точнее, случайно удалить, и при переписывании получить:

[ERROR]: YAML parsing failed: This may be an issue with missing quotes around a template block.
Origin: /home/user/uptime_report.yml:11:19
9 msg:
10 Hostname: {{ inventory_hostname }}
11 Uptime: {{ (ansible_uptime_seconds / 86400) | int }} days,
^ column 19

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

4.8 Воюем с пробелами в Anisble и восстанавливаем пример из первой статьи

В статье Slurm: Примеры Ansible-Playbook есть максимально простой пример (пробелы в начале строки заменены на ! для лучшей считаемости числа пробелов). Файл: example01.yml

- hosts: all

!!tasks:

!!!!- name: Проверить доступность

!!!!!!ping:

Такой сценарий работает, и ему, кстати, безразлична возня с переносами строки.

Если же я пойду в справочник Ansible ansible.builtin.debug module – Print statements during execution, и сделаю

---

- name: Print the gateway for each host when defined

ansible.builtin.debug:

msg: System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}

when: ansible_default_ipv4.gateway is defined

То я получу новую ошибку:

[ERROR]: 'ansible.builtin.debug' is not a valid attribute for a Play

То есть, пример Simple Ansible playbook to get the Linux host uptime – работает, а пример из документации – не работает, то есть не совсем не работает, но это очередной случай «в документации забыли прописать очевидное тем, кто ее пишет, и не очевидное тем, кто ее читает первый раз».

Возьму часть примера из статьи Simple Ansible playbook to get the Linux host uptime и продолжу с ним

Пример 2 (файл: example2) «Не работает!!!!!111111». Пробелы заменены на 1234.

Ошибка: [ERROR]: YAML parsing failed: Colons in unquoted values must be followed by a non-space character.

- name: Print the gateway for each host when defined

12hosts: all

12gather_facts: true # Ensure facts are gathered to get ansible_uptime_seconds

12tasks:

12- name: Display uptime for each host

123456debug:

12345678msg: " Examlpe test 2 "

123456when: (uptime_days | int) > 30

Пример 3 (файл: example3) так работает проверка синтаксиса, но не исполнение yml. Пробелы заменены на 1234

- name: Print the gateway for each host when defined

12hosts: all

12gather_facts: true # Ensure facts are gathered to get ansible_uptime_seconds

12tasks:

1234- name: Display uptime for each host

123456debug:

12345678msg: " Examlpe test 3 "

123456when: (uptime_days | int) > 30

Как легко заметить (не легко, но можно):
Не работающий пример:
12- name: Display uptime for each host
Пример с работающей проверкой синтаксиса:
1234- name: Display uptime for each host

Пример 3 (выше), хотя и проходит проверку, но не будет работать с ошибкой:
[ERROR]: Task failed: Error while evaluating conditional: 'uptime_days' is undefined

Еще раз читаем статью Simple Ansible playbook to get the Linux host uptime, и пытаемся сделать так же. Можно найти статью Отладка плэйбуков ansible.

Пример «НЕ Работает #21 ». Пробелы заменены на 1234
Точнее, не проходит проверку синтаксиса командой
ansible-playbook --syntax-check report21.yml, с ошибкой
YAML parsing failed: This may be an issue with missing quotes around a template block.

---

- name: Get and display system uptimes 21

12hosts: all

12gather_facts: true # Ensure facts are gathered to get ansible_uptime_seconds

12tasks:

1234- name: Display uptime for each host

123456ansible.builtin.debug:

12345678msg:

1234567890Hostname: {{ inventory_hostname }}

1234567890Uptime: {{ (ansible_uptime_seconds / 86400) | int }} days,

1234567890{{ ((ansible_uptime_seconds % 86400) / 3600) | int }} hours,

1234567890{{ (((ansible_uptime_seconds % 86400) % 3600) / 60) | int }} minutes,

1234567890{{ (((ansible_uptime_seconds % 86400) % 3600) % 60) | int }} seconds

123456when: ansible_uptime_seconds is defined

Пример «Работает #22». Пробелы заменены на 1234

Это то, что генерит google AI для примеров, и оно даже работает. Пока не надо отлаживать.

---

- name: Show uptime for each host in seconds

12hosts: all

12gather_facts: true # Ensure facts are gathered

12tasks:

1234- name: Display uptime in seconds

123456ansible.builtin.debug:

12345678msg: "Host {{ inventory_hostname }} has been up for {{ ansible_uptime_seconds }} seconds."

Пример «Работает #23».

Только картинкой, отличия от #21 очевидны – кавычки открыли, кавычки закрыли.

12345678msg:
и
12345678msg: "

4.9 Возвращаемся к основной задаче

Для следующего подхода нам потребуется два, а лучше три файла.
первый - second_inventory.ini

В комментариях мне в файл с настройками ткнули, все правильно сделали, но еще не время переходить к такой конфигурации.
Поэтому сначала:
cp /etc/ansible/hosts /home/user/second_inventory.ini.

Не забыв прочитать Ansible How to build your inventory, и вписав в конфигурацию секцию для закрытой части ssh ключа.

[ansible4]

192.168.1111.2222 ansible_user= ansible1

192.168.1111.3333 ansible_user= ansible1

192.168.1111.4444 ansible_user= ansible1

# compare with: files/second.sh

[all:vars]

ansible_python_interpreter=/usr/bin/python3

[defaults]

private_key_file = /home/ansible1/.ssh/ansible_key

Какой-то странный хардкод получается. Потому что при смене имени я должен прописать новое имя и в скрипте настройки, и в коде для Ansible. Если бы я вел документацию, то подумал бы, как сделать иначе, и прописал бы это где-то в ридми.

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

To copy a private key generated by PuTTYgen for use with Ansible, which typically expects OpenSSH format keys, you need to convert it and then copy the resulting OpenSSH-formatted private key.

Steps to Convert and Copy the Private Key:

Open PuTTYgen: Launch the PuTTY Key Generator application.

Load the Private Key: Click the "Load" button and navigate to your existing private key file (usually with a .ppk extension) generated by PuTTYgen. Enter the passphrase if prompted.

Export as OpenSSH Key:

Go to the "Conversions" menu.

Select "Export OpenSSH key."

You will likely be prompted to save it without a passphrase; choose "Yes" if you want to use it without a password in Ansible (which is common for automated tasks).

Save the OpenSSH Key: Choose a location and filename for the exported OpenSSH-formatted private key (e.g., id_rsa or ansible_key). This file will not have a .ppk extension.

Copy the Key to your Ansible Control Machine: Transfer this newly exported OpenSSH private key file to your Ansible control machine. A common location for private keys on Linux-based systems is ~/.ssh/.

Set Permissions (on Ansible Control Machine): Ensure the private key file has appropriate permissions, typically read-only for the owner to prevent unauthorized access.

chmod 400 ~/.ssh/ansible_key

Не забываем настроить WinSCP,

Open WinSCP: and navigate to the main menu.

Select Options > Preferences.

In the Preferences dialog box, go to the Panels tab.

Locate the option "Show hidden files" and check the box next to it.

Click OK to apply the changes.

Работать так все равно не будет, если вы, конечно, не пошли от рута. Поэтому положим куда попало и переложим от рута локально
переложим файл pikabu_part4_export4ssh в /home/user и сделаем
mv pikabu_part4_export4ssh /home/ansible1/.ssh/ansible_key

Проверим что получилось.
ansible-playbook report23.yml --inventory /home/user/second_inventory.ini

и получим

Failed to parse inventory with 'ini' plugin: Failed to parse inventory: Expected key=value host variable assignment, got: Ansible1

Кто нашел ошибку сам – тот молодец.

кто не нашел, может сравнить

192.168.1111.2222 ansible_user= ansible1
192.168.1111.2222 ansible_user=ansible1

Отдельно надо сказать про ошибку с блоком [defaults]

[defaults]
private_key_file

потому что достаточно прочитать обсуждение ошибки private_key_file vs ansible_ssh_private_key_file #79186 , связанную с определение порядка переменных - Understanding variable precedence, но это уже другая история.

Поэтому, этот блок из конфигурации я пока удалю, и сделаю ручную проверку,

ansible-playbook report23.yml --inventory /home/user/1st_hosts.ini --user ansible1 --private-key /home/ansible1/.ssh/ansible_key

Которая не сработает, и поэтому переходить дальше, к команде

ansible-playbook report23.yml --inventory /home/user/second_inventory.ini --private-key /home/ansible1/.ssh/ansible_key

еще рано.

Потому что команда может и не сработает, с сообщением Server refused our key.
Потому что после копирования ключа, атрибуты на файл /.ssh/ansible_key никто не перепроверил.
Потому что все, что выше, было написано до появления раздела 4.4 Отлаживаем SSH, снова и опять

Потому что 192.168.1111.2222 настроен на порт 2424, а на порту 22 висит ssh до одного из контейнеров, и надо прописать не

192.168.1111.2222 ansible_user=ansible1
а
192.168.1111.2222 ansible_user=ansible1 ansible_port=2424

С чем еще пришлось столкнуться.

С недостатком памяти на VM. Я, в ходе опытов, снизил оперативную память VM с 5000 до 4750 мегабайт. Как оказалось, 4750 МАЛОВАТО.

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

Литература

stackexchange Proper way to add a user account via bash script
stackexchange Why is this random password flagged saying it is too simplistic/systematic?
stackoverflow Change user password with one Bash command line
S/KEY
Ansible Connection methods and details
Ansible How to build your inventory
Ansible ansible.builtin.debug module – Print statements during execution
Статья: Отладка плэйбуков ansible

Перевод: Как убить вашу сеть с помощью Ansible. Оригинал: How to kill your network with Ansible
Перевод: Плейбуки Ansible — советы и примеры. Оригинал: Working with Ansible Playbooks — Tips & Tricks with Examples
slurm: Примеры Ansible-Playbook
пример Simple Ansible playbook to get the Linux host uptime

Тег Ansible не добавляется, ну что тут сделать.

@editors, как теги то добавлять??

Показать полностью 3
[моё] Windows IT Linux Программа Троллейбус Длиннопост Ansible
2
16
Grablay
Grablay
1 месяц назад

Осенние троллейбусы⁠⁠

Показать полностью 13
Осень Троллейбус Настроение Длиннопост
11
773
OttoPyrkin
OttoPyrkin
1 месяц назад
ВМоскве
Серия О Москве - нескучно, интересно и познавательно

Компостеры в московском городском наземном транспорте и история талончиков на проезд⁠⁠

В 1958-м году в нашей стране началось внедрение бескондукторной оплаты за проезд в общественном транспорте, и в салонах автобусов стали появляться билетные кассы-копилки. Первые кассы были напольные в виде металлического ящика, похожего на сейф. Нашел несколько фоток в инете:

Для оплаты проезда пассажиру нужно было опустить монетки в прозрачную часть из оргстекла в верхней части кассы, и затем оторвать билет из билетницы, установленной сбоку кассы. Брошенные в кассу монеты падали на металлическую балансировочную пластину. Когда на пластине скапливалось некоторое количество монет, под их весом она поворачивалась, и монеты с характерным звоном ссыпались в кассету для сбора денег внутри кассы, а пластина возвращалась в исходное положение.

С 1 января 1961 г. до 27 мая 1985 г. стоимость одной поездки в Москве на автобусе составляла 5 копеек, в троллейбусе – 4 копейки, в трамвае – 3 копейки. А в 1985 г. билеты на весь наземный общественный транспорт стали стоить одинаково – 5 копеек.

С бескондукторной оплатой проезда сразу возникла одна проблемка – как оплачивать проезд пассажиру, у которого нет при себе мелких денег? Кассовый аппарат, в отличие от кондуктора, не мог дать сдачи. Для решения этой проблемы ввели абонементные билеты.

Размером такие абонементные билеты были больше, чем обычные билеты в кассе. Их также называли «абонементные талоны».

Продавались они водителями, в виде вот такой склейки из 10 штук, которая называлась «абонементная книжка», в народе просто «книжечка». Позже они стали продаваться еще и в киосках «Проездные билеты» и «Союзпечать».
На талонах даже писали краткую инструкцию, как ими пользоваться)

Войдя в салон, пассажир должен был оторвать один талон от «книжечки», на автобусах, в которых еще были кондукторы, надо было обменять талон у кондуктора на обычный билет, а на машинах, работающих уже без кондуктора, талон надо было опустить в кассу вместо монет, и оторвать обычный кассовый билет.

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

В 1964 году закончился перевод наземного пассажирского транспорта Москвы на работу без кондукторов, и в этом же году советские инженеры придумали кассу-полуавтомат. Это была модель ППБ-3-64 (полуавтомат продажи билетов). Чтобы получить билет из такой кассы, в нее сначала надо было опустить монеты, затем дернуть за рычаг справа, и уже оторванный билет появлялся в специальном кармашке кассы. Если дернуть за рычаг, не опустив в кассу монеты, то билет касса не выдавала.

Касса-полуавтомат срабатывала от веса монет, и талон из «книжечки» она не принимала. И вот тогда, дополнительно к кассам, в салонах появляются компостеры.

Компостеров, за время их использования в общественном транспорте, было около 20 разных моделей. Работали они по принципу дырокола, своими штырьками пробивая в талонах отверстия (компостировали талон). Внутри компостеров эти штырьки можно было переставлять, и комбинации отверстий в разных автобусах отличались.

Когда в салон заходили контролеры, они пробивали в компостере обычную бумажку для образца комбинации отверстий в компостерах данного автобуса, и потом проверяли билеты у пассажиров, сравнивая соответствие отверстий.

С переводом всех автобусов на работу без кондукторов, постепенно на талонах «книжечек» изменился и текст инструкции по пользованию. Вместо обмена талона на билет у кондуктора стали писать про компостеры.

С 1985 года, когда стоимость одной поездки в автобусе, троллейбусе и трамвае стала одинаковой – 5 копеек, вместо трех разных талонов для проезда в автобусе, троллейбусе и трамвае, стали печатать один общий.

Типография Мт8, выпускавшая талоны с 1985 по 1987 год, уже печатала на них слово «талон», а не «билет».

Я застал в детстве билетные кассы, уже поздние модели, и копилок, и полуавтоматов. Кассы-копилки уже были меньше размером. Это была модель А602 У2.

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

Полуавтоматы были модели ППБ-7-75. Для получения билета нужно было нажать на клавишу. При этом касса выдвигала наружу билет с катушки, который надо было оторвать. Помню, что в таких кассах билет часто отрывался на середине. А иногда и вместо целого билета аппарат выдавал только его кусочек. Такое могло быть по причине неисправности механизма кассы, а возможно даже, что их как-то специально «настраивали» на такую работу, чтобы к концу смены можно было забрать себе разницу между проданными билетами и выручкой.

В 1987 году дальнейшее использование касс сочли нецелесообразным. Из салонов наземного общественного транспорта Москвы убрали все кассовые аппараты, и для оплаты проезда остались только компостеры.

Талончики в «книжечку» в типографии склеивали вручную. И для упрощения производства, в том же 1987-м году, абонементные талоны стали делать вот в таком виде, летной по 10 штук с перфорацией между талонами. Водители, вынужденные продавать талоны пассажирам на остановках, из-за разницы размера «книжечки» и ленты, называли ее «простыней».

И тоже в 1987 году, изменился дизайн и размер абонементных талонов. Возможно, по причине, что их стала печатать другая типография, судя по маркировке на талонах. Вместо московских типографий Мт19 и Мт8 с 1987 года талоны для наземного общественного транспорта Москвы стали печатать на ленинградской типографии ЛТ-12.

В 1988 году происходит еще небольшое изменение в дизайне – в верхней части талонов убирают слова «городской транспорт».

С распадом Советского Союза в 1991 году началась дикая инфляция, и по талонам можно отследить как выросла стоимость проезда за два года аж в 200 раз, с 5 копеек до 10 рублей)
Стоимость продолжала расти, и в 1993 году ее вообще перестали указывать на талонах.

С появлением доступных компьютеров и копировальной техники в 90-х годах стали появляться поддельные талоны. Видимо, по этой причине в 1996-м году талоны стали делать на бумаге с водяными знаками, в совершенно новом дизайне и цветными. И для дополнительной защиты от подделок талоны были в двух вариантах цветов.

С 1997 года производством талонов начала заниматься Московская печатная фабрика Гознака. Талоны стали печать на более качественной бумаге, похожей на бумагу, как у денежных купюр. Талоны тоже были двух цветов, но их дизайн изменили конкретно. Для дополнительной защиты от подделок на талонах появилась микропечать. Изображение стало более четким, и талоны получились очень красивыми.

А со II квартала 1998 года талоны стали делать в еще более новом дизайне. В качестве еще одной дополнительной защиты от подделок на талонах появилось рельефное слово «МОСКВА», и талоны стали иметь срок действия 1 квартал.

Цвета талонов были также разные, но теперь по два вида цветов было не на год, а на квартал. И с каждым новым кварталом вместе с цветом менялся и фоновый рисунок микропечати.

А в 2003 году, с началом установки в нашем городе турникетов в автобусах, закончилась история бумажных талончиков. И в сентябре 2004 года, когда на весь наземный общественный транспорт Москвы были установлены турникеты, закончилась и эпоха компостеров.

via

Показать полностью 25
Хочу все знать СССР Познавательно Москва Общественный транспорт Автобус Трамвай Троллейбус Транспорт История города Компостер Талоны Билеты Москвоведение Краеведение Оплата проезда Как это было Длиннопост Касса Кондуктор
72
DirInt
DirInt
1 месяц назад

Лайфхак для пассажиров⁠⁠

Если не хочется платить за проезд, то можно сделать так:
Заходишь в троллейбус/трамвай/автобус, где есть оплата по QR-коду, то просто сканируешь код из приложения банка, типа такого

Лайфхак для пассажиров

И едешь дальше. Читаешь пикабу, новости, хоть чем занимаешся. Пофиг.

Если зайдут контроллеры, то спокойно переключаешься на банковское приложение, нажимаешь "оплатить" и всё хорошо. И не доебутся, и тебе хорошо.

Показать полностью 1
[моё] Автобус Троллейбус Хорошо Халява Проезд Длиннопост
17
10
LaetusPro
LaetusPro
1 месяц назад

Бабло побеждает троллейбус⁠⁠

грустные новости из Тамбова

грустные новости из Тамбова

В Тамбове добили троллейбусную систему. Выглядит это всё как стечение обстоятельств. Мол, не эффективной была эта система. Но как же так вышло?
Мы живём в самой троллейбусной стране мира. Нигде нет такого количества действующих троллейбусных систем. Такое наследие досталось от Советского Союза. Даже в небольших городах действует экологичный и доступный электротранспорт. Построены депо, подстанции, остановки, контактная сеть и вся сопутствующая инфраструктура. Осталось это всё обслуживать, а желательно ещё и развивать.

Как же получается так, что городской электротранспорт становится неэффективным? Очень просто. Город зачем-то приглашает неких "частных перевозчиков" на маршрутках, наверное, неслучайных, не с улицы пришедших, и передаёт им городские маршруты, причём самые длинные и нагруженные. Маршрутки просто забирают пассажиров у настоящего общественного транспорта.
За остановки, знаки, разметку, урны, освещение и всё городское хозяйство отвечает город, маршрутки же всем этим пользуются и ни за что не отвечают. Лишь забирают пассажиров с остановок.
Водители маршруток настоятельно просят пассажиров оплачивать проезд наличными или переводом. Ведь смысл существования маршруток - обеспечение потока неучтённых наличных денег и переводов.

Городские издания пишут о чём угодно, но обходят тему маршруток и низкого качества общественного транспорта. Удивительно! Но напоминают часто, что муниципальный общественный транспорт убыточен.
Очевидно, муниципальный транспорт не прибыльный, но он и не должен таковым быть!
Как не прибыльно, например, уличное освещение. Но никому пока в голову не приходит отключить городское уличное освещение и пригласить в город неких "частных осветителей"
Да и уличные деревья тоже прибыль не приносят, а ресурсов требуют и место занимают. Не все элементы городского хозяйства должны быть прибыльными.

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

Набиваться в тесные автобусы с мутными схемами оплаты теперь эффективнее.

Показать полностью
[моё] Тамбов Троллейбус Маршрутка Разруха Деньги Общественный транспорт Эффективность Технологии Урбанистика
10
44
Ivanartu
Ivanartu
Топовый автор
1 месяц назад

Как думаете, что общего у сверхзвуковой межконтинентальной крылатой ракеты «Буря», сверхзвукового ракетоносца Т-4 и троллейбуса МТБ-82?⁠⁠

Троллейбус МТБ-82

Троллейбус МТБ-82

1/2

«Буря» и Т-4

Страна-производитель? Это тоже, но объединяет данные образцы технической мысли то, что их созданием руководил один и тот же человек. Во всех случаях главным конструктором был Наум Семёнович Черняков.

Наум Семёнович Черняков

Наум Семёнович Черняков

А еще МТБ-82, МКР «Буря» и Т-4 в разные годы строились на одном и том же предприятии - Тушинском машиностроительном заводе.

Кстати, большой пост про «Бурю» читайте по ссылке.

Показать полностью 3
[моё] Авиация Троллейбус Т-4 Военная техника
6
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии