====== Трюки в консоли: 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}}