Различия
Показаны различия между двумя версиями страницы.
| linux:terminal:terminal_tnt_ssh [2021/09/29 12:11] – внешнее изменение 127.0.0.1 | linux:terminal:terminal_tnt_ssh [2021/11/27 03:30] (текущий) – dx | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Трюки в консоли: | ||
| + | {{mdi> | ||
| + | |||
| + | {{tag> | ||
| + | |||
| + | ===== Запуск команды перед установкой SSH соединения ===== | ||
| + | |||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | Например если настроен port knocking. Используем **ProxyCommand** в '' | ||
| + | |||
| + | < | ||
| + | Host foobar | ||
| + | User john | ||
| + | Hostname foobar.com | ||
| + | ProxyCommand bash -c '/ | ||
| + | </ | ||
| + | |||
| + | * %h - hostname | ||
| + | * %p - port | ||
| + | |||
| + | ===== Несколько SSH ключей для одного пользователя ===== | ||
| + | |||
| + | < | ||
| + | ssh-keygen -t rsa -f ~/ | ||
| + | ssh-keygen -t rsa -f ~/ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Host home | ||
| + | Hostname home.example.com | ||
| + | IdentityFile ~/ | ||
| + | User <your home acct> | ||
| + | |||
| + | Host work | ||
| + | Hostname work.example.com | ||
| + | IdentityFile ~/ | ||
| + | User <your work acct> | ||
| + | </ | ||
| + | |||
| + | ===== Как поменять passphrase для SSH ключа ===== | ||
| + | |||
| + | Если есть локальный доступ к ключу, то делаем | ||
| + | |||
| + | < | ||
| + | |||
| + | И вводим новый passphrase. | ||
| + | |||
| + | ===== EscapeChar для зависших сессий ===== | ||
| + | |||
| + | < | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | </ | ||
| + | |||
| + | https:// | ||
| + | |||
| + | // | ||
| + | |||
| + | FIXME | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ===== ssh сервер на нескольких портах ===== | ||
| + | |||
| + | В файл ''/ | ||
| + | |||
| + | < | ||
| + | |||
| + | После чего в netstat будет видно, что SSH доступен одновременно по 22 и 1337. | ||
| + | |||
| + | < | ||
| + | # netstat -plunt | grep ssh | ||
| + | tcp 0 0 0.0.0.0: | ||
| + | tcp 0 0 0.0.0.0: | ||
| + | tcp6 | ||
| + | tcp6 | ||
| + | </ | ||
| + | |||
| + | Можно настроить SFTP на отдельном порту (SSH будет на 22) | ||
| + | |||
| + | < | ||
| + | Subsystem sftp internal-sftp | ||
| + | |||
| + | Match LocalPort 1337 | ||
| + | AllowTCPForwarding no | ||
| + | X11Forwarding no | ||
| + | ForceCommand internal-sftp | ||
| + | </ | ||
| + | |||
| + | Также можно запустить несколько SSH сервисов каждый со своим конфигом FIXME | ||
| + | |||
| + | Делаем симлинки | ||
| + | |||
| + | < | ||
| + | ln -s / | ||
| + | ln -s / | ||
| + | </ | ||
| + | |||
| + | Копируем конфиг и устанавливаем **Port 1337** | ||
| + | |||
| + | < | ||
| + | |||
| + | Копируем systemd сервис | ||
| + | |||
| + | < | ||
| + | |||
| + | и меняем | ||
| + | |||
| + | < | ||
| + | EnvironmentFile=/ | ||
| + | ExecStart=/ | ||
| + | </ | ||
| + | |||
| + | Создаем файл ''/ | ||
| + | |||
| + | < | ||
| + | SSH_USE_STRONG_RNG=0 | ||
| + | OPTIONS=" | ||
| + | </ | ||
| + | |||
| + | Запускаем новый systemd сервис | ||
| + | |||
| + | < | ||
| + | systemctl daemon-reload | ||
| + | systemctl enable sshd_sftp.service | ||
| + | systemctl start sshd_sftp.service | ||
| + | </ | ||
| + | |||
| + | Проверяем в netstat | ||
| + | |||
| + | < | ||
| + | # netstat -plunt | grep ssh | ||
| + | tcp 0 0 0.0.0.0: | ||
| + | tcp 0 0 0.0.0.0: | ||
| + | tcp6 | ||
| + | tcp6 | ||
| + | </ | ||
| + | |||
| + | Вероятно надо еще проверить работу syslog, остается в todo. | ||
| + | |||
| + | ===== Разрешить доступ root только с одного IP ===== | ||
| + | |||
| + | Запрещаем доступ по SSH пользователю root через опцию **PermitRootLogin no** | ||
| + | |||
| + | Добавляем в файл ''/ | ||
| + | |||
| + | < | ||
| + | Match Host my_hostname | ||
| + | | ||
| + | </ | ||
| + | |||
| + | или так | ||
| + | |||
| + | < | ||
| + | Match Address 192.168.10.25 | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ===== Разрешить доступ root только по открытому ключу ===== | ||
| + | |||
| + | Добавляем в файл ''/ | ||
| + | |||
| + | < | ||
| + | Match Address 192.168.10.25 | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Опция **without-password**, | ||
| + | |||
| + | Еще пример. Вход по паролю запрещен глобально. Нужно разрешить доступ пользователю john с нескольких адресов | ||
| + | |||
| + | < | ||
| + | PermitRootLogin no | ||
| + | PermitEmptyPasswords no | ||
| + | PasswordAuthentication no | ||
| + | |||
| + | Match User john Address 192.168.1.0/ | ||
| + | PasswordAuthentication yes | ||
| + | </ | ||
| + | |||
| + | ===== rsync error: remote command not found (code 127) ===== | ||
| + | |||
| + | При переносе архива на удаленный сервер с помощью rsync | ||
| + | |||
| + | < | ||
| + | |||
| + | появляется ошибка | ||
| + | |||
| + | < | ||
| + | bash: rsync: command not found | ||
| + | rsync: connection unexpectedly closed (0 bytes received so far) [sender] | ||
| + | rsync error: remote command not found (code 127) at io.c(605) [sender=3.0.9] | ||
| + | </ | ||
| + | |||
| + | При использовании транспортного протокола ssh при копирования файлов rsync должен быть установлен с двух сторон. | ||
| + | |||
| + | ===== Узнать внутренний и внешний IP из консоли (OSX) ===== | ||
| + | |||
| + | Для удобства добавил алиасы в '' | ||
| + | |||
| + | < | ||
| + | alias intip=" | ||
| + | alias extip=" | ||
| + | </ | ||
| + | |||
| + | Про интерфейсы [[https:// | ||
| + | |||
| + | ===== POSSIBLE BREAK-IN ATTEMPT ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | ===== Как закрыть пользовательскую SSH сессию (pts) ===== | ||
| + | |||
| + | * http:// | ||
| + | * https:// | ||
| + | |||
| + | < | ||
| + | [~]# w | ||
| + | | ||
| + | USER | ||
| + | secure | ||
| + | secure | ||
| + | [~]# pkill -HUP -t pts/0 | ||
| + | </ | ||
| + | |||
| + | ===== В консоли бнопня и кракозябры ===== | ||
| + | |||
| + | Если к примеру прочитать бинарный файл через cat, more или less or, то в ответ мы получим бнопню и консоль перестанет работать. | ||
| + | |||
| + | Нажимаем < | ||
| + | |||
| + | Нашёл [[http:// | ||
| + | |||
| + | Делаем алиас в '' | ||
| + | |||
| + | < | ||
| + | |||
| + | Как всё сломается, | ||
| + | |||
| + | ===== Email уведомление о входе в систему ===== | ||
| + | |||
| + | < | ||
| + | if [ " | ||
| + | DATE=`date` | ||
| + | IP=`echo $SSH_CLIENT | ||
| + | USER=`id -un` | ||
| + | echo -e "User: $USER\nIP: $IP\nDate: $DATE" | mail -s "" | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | ===== server refused to start a shell ===== | ||
| + | |||
| + | Надо больше памяти | ||
| + | |||
| + | Лог | ||
| + | |||
| + | < | ||
| + | < | ||
| + | [2761174.913903] systemd[1]: apt-daily.service: | ||
| + | [2761174.958250] systemd[1]: apt-daily.service: | ||
| + | ... | ||
| + | [2762122.429047] systemd[1]: phpsessionclean.service: | ||
| + | [2762122.484064] systemd[1]: phpsessionclean.service: | ||
| + | [2762122.537514] systemd[1]: Failed to start Clean php session files. | ||
| + | [2762122.572386] systemd[1]: phpsessionclean.service: | ||
| + | [2762122.612237] systemd[1]: phpsessionclean.service: | ||
| + | ... | ||
| + | [2772386.221701] systemd[1]: Created slice User Slice of bob. | ||
| + | [2772386.257589] systemd[1]: [email protected]: | ||
| + | [2772386.299359] systemd[1]: [email protected]: | ||
| + | [2772386.343392] systemd[1]: Failed to start User Manager for UID 1001. | ||
| + | [2772386.371912] systemd[1]: [email protected]: | ||
| + | [2772386.402837] systemd[1]: [email protected]: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | {{tag> | ||