====== Трюки в консоли: SSH ====== {{mdi>console?48&align=right}} {{tag>bash tnt}} ===== Запуск команды перед установкой SSH соединения ===== * https://unix.stackexchange.com/a/44343 * https://askubuntu.com/a/1268036 Например если настроен port knocking. Используем **ProxyCommand** в ''ssh_config'' Host foobar User john Hostname foobar.com ProxyCommand bash -c '/usr/bin/knock %h 1337 31337 7777; sleep 1; exec /bin/nc %h %p' * %h - hostname * %p - port ===== Несколько SSH ключей для одного пользователя ===== ssh-keygen -t rsa -f ~/.ssh/id_rsa.home ssh-keygen -t rsa -f ~/.ssh/id_rsa.work Host home Hostname home.example.com IdentityFile ~/.ssh/id_rsa.home User Host work Hostname work.example.com IdentityFile ~/.ssh/id_rsa.work User ===== Как поменять passphrase для SSH ключа ===== Если есть локальный доступ к ключу, то делаем # ssh-keygen -p -f ~/.ssh/id_rsa И вводим новый passphrase. ===== EscapeChar для зависших сессий ===== * [[https://man.openbsd.org/ssh#~.|~.]]Disconnect. * [[https://man.openbsd.org/ssh#~_Z|~^Z]] Background ssh. * [[https://man.openbsd.org/ssh#~_|~#]] List forwarded connections. * [[https://man.openbsd.org/ssh#~&|~&]] Background ssh at logout when waiting for forwarded connection / X11 sessions to terminate. https://man.openbsd.org/ssh#ESCAPE_CHARACTERS //Опция "EscapeChar" определяет сессионный знак перехода в приостановленное состояние.// FIXME * https://www.opennet.ru/tips/2389_ssh_escape.shtml * https://www.opennet.ru/man.shtml?topic=ssh&category=1&russian=0 * https://www.void.gr/kargig/blog/2006/01/24/ssh-escape-characters/ ===== ssh сервер на нескольких портах ===== В файл ''/etc/ssh/sshd_config'' добавляем Port 1337 После чего в netstat будет видно, что SSH доступен одновременно по 22 и 1337. # netstat -plunt | grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 11017/sshd tcp 0 0 0.0.0.0:1337 0.0.0.0:* LISTEN 11017/sshd tcp6 0 0 :::22 :::* LISTEN 11017/sshd tcp6 0 0 :::1337 :::* LISTEN 11017/sshd Можно настроить SFTP на отдельном порту (SSH будет на 22) Subsystem sftp internal-sftp Match LocalPort 1337 AllowTCPForwarding no X11Forwarding no ForceCommand internal-sftp Также можно запустить несколько SSH сервисов каждый со своим конфигом FIXME Делаем симлинки ln -s /usr/sbin/sshd /usr/sbin/sshd_sftp ln -s /etc/pam.d/sshd /etc/pam.d/sshd_sftp Копируем конфиг и устанавливаем **Port 1337** cp /etc/ssh/sshd_config /etc/ssh/sshd_config_sftp Копируем systemd сервис cp /etc/systemd/system/multi-user.target.wants/sshd.service /etc/systemd/system/sshd_sftp.service и меняем EnvironmentFile=/etc/sysconfig/sshd_sftp ExecStart=/usr/sbin/sshd_sftp -D $OPTIONS Создаем файл ''/etc/sysconfig/sshd_sftp'' SSH_USE_STRONG_RNG=0 OPTIONS="-f /etc/ssh/sshd_config_sftp" Запускаем новый 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:22 0.0.0.0:* LISTEN 11023/sshd tcp 0 0 0.0.0.0:1337 0.0.0.0:* LISTEN 11089/sshd tcp6 0 0 :::22 :::* LISTEN 11023/sshd tcp6 0 0 :::1337 :::* LISTEN 11089/sshd Вероятно надо еще проверить работу syslog, остается в todo. ===== Разрешить доступ root только с одного IP ===== Запрещаем доступ по SSH пользователю root через опцию **PermitRootLogin no** Добавляем в файл ''/etc/ssh/sshd_config'' Match Host my_hostname PermitRootLogin yes или так Match Address 192.168.10.25 PermitRootLogin yes ===== Разрешить доступ root только по открытому ключу ===== Добавляем в файл ''/etc/ssh/sshd_config'' Match Address 192.168.10.25 PermitRootLogin without-password PubkeyAuthentication yes Опция **without-password**, запрещает вход по паролю для root. **PasswordAuthentication no** указывать НЕ нужно. Еще пример. Вход по паролю запрещен глобально. Нужно разрешить доступ пользователю john с нескольких адресов PermitRootLogin no PermitEmptyPasswords no PasswordAuthentication no Match User john Address 192.168.1.0/24,192.168.10.25 PasswordAuthentication yes ===== rsync error: remote command not found (code 127) ===== При переносе архива на удаленный сервер с помощью rsync # rsync -avzhe ssh backup.tar.gz root@192.168.100.55:/home/user/ появляется ошибка 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) ===== Для удобства добавил алиасы в ''~/.bash_profile'' alias intip="ipconfig getifaddr en0" alias extip="curl ipecho.net/plain ; echo" Про интерфейсы [[https://stackoverflow.com/a/55232331|lo0, en0, fw0, sft0, gif0, awdl0, p2p0]] ===== POSSIBLE BREAK-IN ATTEMPT ===== http://superuserdo.info/os/debian/sshd-possible-break-in-attempt/ ===== Как закрыть пользовательскую SSH сессию (pts) ===== * http://cpaneladminhelp.com/how-to-kill-a-users-ssh-session/ * https://superuser.com/questions/625803/how-to-kick-other-root-users-logged-in-from-different-shells [~]# w 09:16:04 up 23 days, 23:26, 2 users, load average: 0.16, 0.17, 0.23 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT secure pts/0 192.168.1.187 17Nov17 15days 5:10 0.05s sshd: secure [priv] secure pts/1 192.168.13.7 09:15 0.00s 0.01s 0.00s w [~]# pkill -HUP -t pts/0 ===== В консоли бнопня и кракозябры ===== Если к примеру прочитать бинарный файл через cat, more или less or, то в ответ мы получим бнопню и консоль перестанет работать. Нажимаем CTRL-c, вводим reset, жмём ввод. Нашёл [[http://unix.stackexchange.com/a/299922|крутой вариант]] Делаем алиас в ''.bashrc'' alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"' Как всё сломается, то делаем CTRL-c несколько раз и потом вводим ''fix'' ===== Email уведомление о входе в систему ===== if [ "$SSH_TTY" ] ; then DATE=`date` IP=`echo $SSH_CLIENT USER=`id -un` echo -e "User: $USER\nIP: $IP\nDate: $DATE" | mail -s ""Alert: Remote Access Granted to `id -un`" email@host.net" fi ===== server refused to start a shell ===== Надо больше памяти Лог [2761174.913903] systemd[1]: apt-daily.service: Failed to fork: Cannot allocate memory [2761174.958250] systemd[1]: apt-daily.service: Failed to run 'start' task: Cannot allocate memory ... [2762122.429047] systemd[1]: phpsessionclean.service: Failed to fork: Cannot allocate memory [2762122.484064] systemd[1]: phpsessionclean.service: Failed to run 'start' task: Cannot allocate memory [2762122.537514] systemd[1]: Failed to start Clean php session files. [2762122.572386] systemd[1]: phpsessionclean.service: Unit entered failed state. [2762122.612237] systemd[1]: phpsessionclean.service: Failed with result 'resources'. ... [2772386.221701] systemd[1]: Created slice User Slice of bob. [2772386.257589] systemd[1]: user@1001.service: Failed to fork: Cannot allocate memory [2772386.299359] systemd[1]: user@1001.service: Failed to run 'start' task: Cannot allocate memory [2772386.343392] systemd[1]: Failed to start User Manager for UID 1001. [2772386.371912] systemd[1]: user@1001.service: Unit entered failed state. [2772386.402837] systemd[1]: user@1001.service: Failed with result 'resources'. {{tag>linux terminal tnt ssh}}