RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:terminal:terminal_tnt_ssh

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

linux:terminal:terminal_tnt_ssh [2021/09/29 12:11] – внешнее изменение 127.0.0.1linux:terminal:terminal_tnt_ssh [2021/11/27 03:30] (текущий) dx
Строка 1: Строка 1:
 +====== Трюки в консоли: 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''
 +
 +<code>
 +Host foobar
 +    User john
 +    Hostname foobar.com
 +    ProxyCommand bash -c '/usr/bin/knock %h 1337 31337 7777; sleep 1; exec /bin/nc %h %p'
 +</code>
 +
 +  * %h - hostname
 +  * %p - port
 +
 +===== Несколько SSH ключей для одного пользователя =====
 +
 +<code>
 +ssh-keygen -t rsa -f ~/.ssh/id_rsa.home
 +ssh-keygen -t rsa -f ~/.ssh/id_rsa.work
 +</code>
 +
 +<code>
 +Host home
 +Hostname home.example.com
 +IdentityFile ~/.ssh/id_rsa.home
 +User <your home acct>
 +
 +Host work
 +Hostname work.example.com
 +IdentityFile ~/.ssh/id_rsa.work
 +User <your work acct>
 +</code>
 +
 +===== Как поменять passphrase для SSH ключа =====
 +
 +Если есть локальный доступ к ключу, то делаем
 +
 +<code># ssh-keygen -p -f ~/.ssh/id_rsa</code>
 +
 +И вводим новый passphrase.
 +
 +===== EscapeChar для зависших сессий =====
 +
 +<code>
 +  * [[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.
 +</code>
 +
 +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'' добавляем
 +
 +<code>Port 1337</code>
 +
 +После чего в netstat будет видно, что SSH доступен одновременно по 22 и 1337.
 +
 +<code>
 +# 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 :::22                   :::                   LISTEN      11017/sshd          
 +tcp6            0 :::1337                 :::                   LISTEN      11017/sshd    
 +</code>
 +
 +Можно настроить SFTP на отдельном порту (SSH будет на 22)
 +
 +<code>
 +Subsystem sftp internal-sftp
 +
 +Match LocalPort 1337
 +AllowTCPForwarding no
 +X11Forwarding no
 +ForceCommand internal-sftp
 +</code>
 +
 +Также можно запустить несколько SSH сервисов каждый со своим конфигом FIXME
 +
 +Делаем симлинки
 +
 +<code>
 +ln -s /usr/sbin/sshd /usr/sbin/sshd_sftp
 +ln -s /etc/pam.d/sshd /etc/pam.d/sshd_sftp
 +</code>
 +
 +Копируем конфиг и устанавливаем **Port 1337**
 +
 +<code>cp /etc/ssh/sshd_config /etc/ssh/sshd_config_sftp</code>
 +
 +Копируем systemd сервис
 +
 +<code>cp /etc/systemd/system/multi-user.target.wants/sshd.service /etc/systemd/system/sshd_sftp.service</code>
 +
 +и меняем
 +
 +<code>
 +EnvironmentFile=/etc/sysconfig/sshd_sftp
 +ExecStart=/usr/sbin/sshd_sftp -D $OPTIONS
 +</code>
 +
 +Создаем файл ''/etc/sysconfig/sshd_sftp''
 +
 +<code>
 +SSH_USE_STRONG_RNG=0
 +OPTIONS="-f /etc/ssh/sshd_config_sftp"
 +</code>
 +
 +Запускаем новый systemd сервис
 +
 +<code>
 +systemctl daemon-reload
 +systemctl enable sshd_sftp.service
 +systemctl start sshd_sftp.service
 +</code>
 +
 +Проверяем в netstat
 +
 +<code>
 +# 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 :::22                   :::                   LISTEN      11023/sshd          
 +tcp6            0 :::1337                 :::                   LISTEN      11089/sshd   
 +</code>
 +
 +Вероятно надо еще проверить работу syslog, остается в todo.
 +
 +===== Разрешить доступ root только с одного IP =====
 +
 +Запрещаем доступ по SSH пользователю root через опцию **PermitRootLogin no**
 +
 +Добавляем в файл ''/etc/ssh/sshd_config''
 +
 +<code>
 +Match Host my_hostname
 +     PermitRootLogin yes
 +</code>
 +
 +или так
 +
 +<code>
 +Match Address 192.168.10.25
 +     PermitRootLogin yes
 +</code>
 +
 +===== Разрешить доступ root только по открытому ключу =====
 +
 +Добавляем в файл ''/etc/ssh/sshd_config''
 +
 +<code>
 +Match Address 192.168.10.25
 +     PermitRootLogin without-password
 +     PubkeyAuthentication yes
 +</code>
 +
 +Опция **without-password**, запрещает вход по паролю для root. **PasswordAuthentication no** указывать НЕ нужно.
 +
 +Еще пример. Вход по паролю запрещен глобально. Нужно разрешить доступ пользователю john с нескольких адресов
 +
 +<code>
 +PermitRootLogin no
 +PermitEmptyPasswords no
 +PasswordAuthentication no
 +
 +Match User john Address 192.168.1.0/24,192.168.10.25
 +    PasswordAuthentication yes
 +</code>
 +
 +===== rsync error: remote command not found (code 127) =====
 +
 +При переносе архива на удаленный сервер с помощью rsync
 +
 +<code># rsync -avzhe ssh backup.tar.gz [email protected]:/home/user/</code>
 +
 +появляется ошибка
 +
 +<code>
 +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]
 +</code>
 +
 +При использовании транспортного протокола ssh при копирования файлов rsync должен быть установлен с двух сторон.
 +
 +===== Узнать внутренний и внешний IP из консоли (OSX) =====
 +
 +Для удобства добавил алиасы в ''~/.bash_profile''
 +
 +<code>
 +alias intip="ipconfig getifaddr en0" 
 +alias extip="curl ipecho.net/plain ; echo"
 +</code>
 +
 +Про интерфейсы [[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
 +
 +<code>
 +[~]# 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/   192.168.1.187    17Nov17 15days  5:10   0.05s sshd: secure [priv]
 +secure   pts/   192.168.13.7    09:15    0.00s  0.01s  0.00s w
 +[~]# pkill -HUP -t pts/0
 +</code>
 +
 +===== В консоли бнопня и кракозябры =====
 +
 +Если к примеру прочитать бинарный файл через cat, more или less or, то в ответ мы получим бнопню и консоль перестанет работать.
 +
 +Нажимаем <key>CTRL-c</key>, вводим reset, жмём ввод.
 +
 +Нашёл [[http://unix.stackexchange.com/a/299922|крутой вариант]]
 +
 +Делаем алиас в ''.bashrc''
 +
 +<code>alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'</code>
 +
 +Как всё сломается, то делаем <key>CTRL-c</key> несколько раз и потом вводим ''fix''
 +
 +===== Email уведомление о входе в систему =====
 +
 +<code>
 +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 protected]"
 +fi
 +</code>
 +
 +===== server refused to start a shell =====
 +
 +Надо больше памяти
 +
 +Лог
 +
 +<hidden>
 +<code>
 +[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]: [email protected]: Failed to fork: Cannot allocate memory
 +[2772386.299359] systemd[1]: [email protected]: Failed to run 'start' task: Cannot allocate memory
 +[2772386.343392] systemd[1]: Failed to start User Manager for UID 1001.
 +[2772386.371912] systemd[1]: [email protected]: Unit entered failed state.
 +[2772386.402837] systemd[1]: [email protected]: Failed with result 'resources'.
 +</code>
 +</hidden>
 +
 +{{tag>linux terminal tnt ssh}}