Содержание
Трюки в консоли: 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" определяет сессионный знак перехода в приостановленное состояние.
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 сервисов каждый со своим конфигом
Делаем симлинки
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
Надо больше памяти
Лог
Обсуждение