RTFM.WIKI

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

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

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


linux:terminal:terminal_tnt_ssh

Трюки в консоли: SSH

console

Запуск команды перед установкой SSH соединения

Например если настроен 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 <your home acct>

Host work
Hostname work.example.com
IdentityFile ~/.ssh/id_rsa.work
User <your work acct>

Как поменять 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

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 [email protected]:/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"

Про интерфейсы lo0, en0, fw0, sft0, gif0, awdl0, p2p0

POSSIBLE BREAK-IN ATTEMPT

Как закрыть пользовательскую SSH сессию (pts)

[~]# 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, жмём ввод.

Нашёл крутой вариант

Делаем алиас в .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 protected]"
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]: [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'.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/terminal/terminal_tnt_ssh.txt · Последнее изменение: 2021/11/27 03:30 — dx