Еще один вариант — это вариант ответа @Jagadish:наstrace
демона ssh.
У него есть существенное преимущество: нам не нужно останавливать sshd, что может привести к полной блокировке, если что-то пойдет не так.
Во-первых, мы находим pid основного процесса sshd. Здесь мы можем увидеть это, выполнив pstree -pa|less
.
|-sshd,633 -D <-- THIS IS WHAT WE WANT!
| `-sshd,21973
| `-sshd,21996
| `-bash,22000
| `-screen,638 -r
Зная, что pid равен 633, мы можем strace
его, следуя его потомкам:
strace -p 633 -s 4096 -f -o sux
В результате все, что сделал этот sshd и его дочерние процессы, будут переданы -в файл с именем sux
в локальном каталоге.
Затем воспроизведите проблему.
У него будет огромный список журналов вызовов ядра, которые в основном непонятны/неактуальны для нас, но не везде. В моем случае важным было вот это:
6834 sendto(4, "<38>Jan 15 18:49:21 sshd[6834]: User cica not allowed because account is locked\0", 84, MSG_NOSIGNAL, NULL, 0) = 84
Имелось в виду, что sshd пытался запротоколировать сообщение Пользователь cica не разрешен, т.к. учетная запись заблокирована-только не смог, т.к. логирование недостаточно подробное для этого. Но мы уже знаем, что публичный ключ был отклонен, потому что учетная запись была заблокирована.
Это еще не решение -теперь надо гуглить, что означает "заблокированный аккаунт" в случае с sshd. Скорее всего, это будет какое-то тривиальное /etc/passwd
, /etc/shadow
волшебство,но главное сделано -проблема не таинственная, а легко поддающаяся отладке/поиск в Google.
Запустите его как службу.
Создать/etc/systemd/system/myscript.service
:
[Unit]
Description=My Script
[Service]
ExecStart=/usr/bin/python3 /path/script.py
[Install]
WantedBy=multi-user.target
Затем запустите его с помощью:
sudo systemctl start myscript # Runs the script now
sudo systemctl enable myscript # Sets the script to run every boot
Есть много других вещей, которые вы можете сделать, например, запустить его от имени определенного пользователя с помощью User=
, настроить его на запуск только после того, как сеть будет доступна с помощью After=networking.target
или множество других вещей. Если он запускает графический интерфейс, вы, вероятно, захотите запустить его как службу пользователя -.
Дополнительные параметры см. вman systemd.unit
и man systemd.service
.