SSH хитрости
Содержание
- 1 Полностью взято здесь, сохранено на всякий случай ниже
- 2 Обратный ssh туннель
Полностью взято здесь, сохранено на всякий случай ниже
SSH
Описание ssh c англоязычной Wikipedia (перевод):
В компьютерных сетях ssh или " Secure Shell" является сетевым протоколом с позволяющим устанавливать связь между локальным и удаленным (remote) компьютерами. При этом применяется криптография с публичным ключом (public key), для аутентификации удаленного компьютера или, опционально, для позволения аутентифицировать пользователя с удаленного компьютера. ssh гарантирует конфиденциальность и целостность передачи данных между обоими компьютерами, используя кодирование и MACs (message authentication codes). Типичнная сфера применения ssh - вход в систему на удаленном (remote) компьютере и выполнение команд на нем, также поддерживается туннелирование и форвардинг любых портов TCP и X11. Файлы могут передаваться по включенным в ssh протоколам sftp или scp. В базовой установке сервер ssh использует порт TCP 22.
Немецкоязычную первичную информацию о ssh можно найти на страницах немецкоязычной Wikipedia.
Безопастность протокола ssh
Как правило, регистрация root через ssh должна быть запрещена. Вообще стоит избегать входа в систему как root, что позволит получить дополнительные гарантии безопасности. Так же, с целью ограничить возможность проведения атак типа brute force (перебор паролей по словарю, требующий значительного времени), стоит ограничить пользователей как в количестве попыток для входа в систему, так в продолжительности открытия окна регистрации (до 10 минут)
Вышеуказанные меры возможно реализовать путем редактирования файла конфигурации ( в любом, предпочитаемом Вами редакторе):
/etc/ssh/sshd_config
Ищем и изменяем рискованные установки.
Следующие установки должны быть изменены:
Порт <желаемый порт>: эта запись должна указывать на порт в маршрутизаторe, который свободно соединен к линии. Если Вы не знаете, что это такое, стоит еще раз обдумать применение ssh для Remote управления. Debian устанавливает порт 22 как стандарт. Однако целесообразно, использовать порт вне зоны стандартного сканирования, поэтому мы используем, например, порт 5874:
Port 5874
ListenAddress <IP компьютера или интерфейса сети>: Так как порт передается дальше роутеру, компьютер должен использовать статический IP адрес, если только не используется никакой локальный DNS сервер. Мы используем статический IP для примера:
ListenAddress 192.168.2.134
Хотя версия 2 протокола ssh установлена в Debian по умолчанию, но, конечно, стоит удостовериться в этом еще раз.
LoginGraceTime <временной промежуток процесса регистрации>: позволенный для регистрации промежуток времени составляет как стандарт абсурдные 600 секунд. Так как 10 минут явно избыточны, чтобы ввести имя пользователя и пароль, мы установим несколько более благоразумный промежуток времени:
LoginGraceTime 45
Теперь имеется 45 секунд для входа, и хакер не имеет 10 минут на каждую попытку взломать пароль.
PermitRootLogin <yes>: почему здесь Debian выдал разрешение на вход в систему как root, не объяснимо. Мы исправляем на 'no':
PermitRootLogin no
StrictModes yes
MaxAuthTries <количество позволенных попыток регистрации>: Вы не должны устанавливать больше чем 3 или 4:
MaxAuthTries 2
Следующие установки должны быть добавлены, так как они отсутствуют по умолчанию:
AllowUsers: имена пользователей, которым позволен доступ через ssh, разделенные символом пробела
AllowUsers <xxx>: только зарегистрированные пользователи могут использовать доступ, и только с пользовательскими правами. С adduser можно добавить пользователя специально для использования ssh:
AllowUsers werauchimmer
Так же можно ограничить с каких IP может заходить пользователь
AllowUsers user1@172.16.1.2?? user1@10.0.0.20 user1@192.168.3.* user2@* user3@172.16.1.* user3@192.168.3.* user3@10.0.0.20 user3@10.0.0.30
PermitEmptyPasswords <xxx>: дает Вашему пользователю прекрасный длинный пароль, который за миллионы лет нельзя было бы подобрать. Пользователь с доступом ssh должен быть единственным. Если он уже зарегистрирован, то может с su стать root:
PermitEmptyPasswords no
PasswordAuthentication <xxx>: конечно, должено иметь значение 'yes'. В случае, когда не используют KeyLogin.
PasswordAuthentication yes [если никаких keys не используют]
В конце концов:
/etc/init.d/ssh restart
Теперь имеется достаточно надежная конфигурация ssh. И напомним еще раз, что лучше, прежде всего добавить пользователя специально для использования ssh.
Программы X-Windows используемые через SSH
Сама программа исполняется на удаленном компьютере, графическая пользовательская оболочка (GUI) отображается на локальном компьютере.
Ввод данных:
* sidux
* IP локального компьютера: 192.168.1.10/24 (только выдача изображения X11 программы)
* IP локального компьютера: 192.168.1.2/24 (здесь выполняется X11 программa)
Конфигурация:
На удаленном компьютере дополняем файл /etc/hosts.allow следующими строками:
ssh sshd : 192.168.1.0/24 : ALLOW # e.g. позволяет (allow) всем адресам по локальной сети # (local area network, локальная сеть) доступ через ssh server
Откройте консоль и используйте следующую команду. (Это создаёт ssh соединение с X-Forwarding) :
ssh -X 192.168.1.2 (вводят собственный пароль ssh, если запрашивается, или пароль к ключу ssh, если на Remote компьютер послан собственный публичный ключ и там добавились файлы authorized_keys для указанного пользователя)
Вызов программы X в терминале:, например 'iceweasel':
ssh -X 192.168.1.2 (вводят (по запросу) собственный пароль ssh или пароль к ключу ssh, если на Remote компьютер послан собственный публичный ключ и там добавились файлы authorized_keys для указанного пользователя) iceweasel oder oocalc oder oowriter oder kspread
Remote доступ с персонального компьютера в Windows при использовании ssh и X-Forwarding:
* Загружают и прожигают Cygwin XLiveCD
* Вставляют CD в дисковод и ждут автоматический старт (autorun)
* Далее (continue) нажимают до тех пор пока не откроется окно терминала.
* Вводят следующую команду:
ssh -X username@xxx.xxx.xxx.xxx
Помните: xxx.xxx.xxx.xxx является IP Linux Remote компьютера или его URL (например dyndns.org аккаунта), и пользовательское имя является, конечно, пользовательским именем существующего пользовательского аккаунта на Remote компьютере. После успешного начала сеанса можно, например, запустить 'kmail' для получения электронных сообщений.
Важно: hosts.allow должен содержать запись, которая также позволяет доступ компьютерам из других сетей. Если используется маршрутизатор или NAT-брандмауэр, то порт 22 должен быть переданным дальше (portforwarding) на Linux-PC.
SSH в konqueror
Konqueror включает поддержку ssh в виде протоколов using sftp:// and uses the ssh protocol.
1) Open a new Konqueror window
Пример 1: Во всплывающем окне будет запрошен пароль ssh, введите пароль и нажмите ОК:
sftp://sidux1@my-home-server.dyndns.org
Пример 2: непосредственное соединение, без запроса пароля
sftp://username:password@ssh-server.com
Применение в локальной сети
sftp://username@10.x.x.x or 198.x.x.x.x (Примечание: введите пароль во всплывающем окне и нажимайте ОК)
SSH соединение таким образом оказывается установленным. В соответствующем окне Konqueror можно работать с файлами на сервере ssh также, как с локальными.
NOTE: If you have set the ssh port to to use another port, other than the default of 22, you need to specify the port that sftp/fish is to use:
sftp://user@ip:port
'user@ip:port' is standard sytax for many programs like sftp, smb, fish
Использование SSHFS
SSHFS - это простой, быстрый и надежный метод использующий FUSE, для подсоединения удаленной файловой системы. Со стороны сервера необходим только работающий ssh-daemon.
Со стороны клиента сперва инсталлируется sshfs:
apt-get update && apt-get install sshfs
Подсоединение удаленной файловой системы очень просто:
sshfs username@remote_hostname:directory local_mount_point
Причем username подразумевает имя пользователя на удаленном Host.
Если не указывается никакой определенный каталог, будет открыт каталог Home удаленного пользователя. Пожалуйста, обратите внимание: двоеточие : является непременно нужным, даже если никакой каталог не указывается!
После подсоединения удаленный каталог ведет себя как локальная файловая система. Можно искать файлы, читать и изменять их, а также запускать скрипты как на локальной файловой системе.
Отсоединение:
fusermount -u local_mount_point
При регулярном использовании sshfs рекомендуется внести запись в /etc/fstab вида:
sshfs#username@remote_hostname:directory local_mount_point fuse user,noauto 0 0
Это делает возможным каждому пользователю группы fuse подсоединить файловую система известной командой:
mount /путь/к/mount/точка
Отсоединение можно произвести следующей командой:
umount /путь/кmount/точка
А этой командой проверяется, - членство в группе fuse:
cat /etc/group | grep fuse
Ответ должен был выглядеть, например, таким образом:
fuse:x:117: <имя пользователя>
Если имя пользователей (username) не указано, используют,. как root, команду adduser:
adduser <имя пользователя> fuse
Внимание: "id" будет только после повторного регистрирования в группе "fuse".
Теперь имя пользователя должно быть указано, и следующие команды становятся выполнимы:
mount local_mount_point
и
umount local_mount_point
TCPKeepAlive
Для поддержки ssh подключения используем опции:
- ClientAliveInterval - время простоя в секундах, после которого служебный запрос. Поддерживается только протокол 2. По-умолчанию установлен в 0, т.е. не использовать служебные запросы
- ClientAliveCountMax - количество проверок доступности клиента, которые могут оставаться без ответа. Если предел достигнут, sshd завершит сеанс:
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=10 $HOST
Обратный ssh туннель
Образец:
ssh server_user@server_ip -R [bind_address:]port:host:hostport
или с поддержкой туннеля:
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=15 -o ServerAliveCountMax=10 server_user@server_ip -R [bind_address:]port:host:hostport
например
ssh rrv@192.168.0.1 -R 192.168.0.1:8888:localhost:9999
Расшарит на удаленном сервере на ip 192.168.0.1 и порту 8888 локальный порт 9999 (машины с которой инициируем ssh подключение)
Так вот, в обычном случае на удаленном сервере расшарится порт только на 127.0.0.1 не зависимо от того что мы укажем в bind_address. Для того что-бы все работало как мы хотим, на сервере к которому подключаемся в файле
/etc/ssh/sshd_config
необходимо добавить строку
GatewayPorts yes
и перезапустить sshd
sudo service ssh restart
Привилегированные порты (1-1024) могут быть использованы только для пользователя root.
Скрипт для запуска через cron:
#!/bin/bash # Проверяем есть ли подключение по ssh TUN=$(/usr/bin/ps -waux | grep i-rrv.ru | grep -v grep) if [[ -z ${TUN} ]] then /usr/bin/ssh -N -o TCPKeepAlive=yes -o ServerAliveInterval=15 \ -o ServerAliveCountMax=10 -i /home/tunnel/.ssh/id_rsa i-rrv.ru ] -p22 -R127.0.0.1:8888:127.0.0.1:9999 & fi exit 0
- -N - только туннель, без возможности посылать команды
Проверка работы туннеля
Скрипт для проверки туннеля:
#!/bin/bash NC='/bin/nc' #NC='netcat' HOST='192.168.0.1' # host Из предыдущего примера PORT='8888' # port Из предыдущего примера DT=`/bin/date` if ( ! $NC -w10 -z $HOST $PORT ) ; then # проверяем текущий порт и если он закрыт, echo "tunnel (port) НЕ доступен $DT" >> /var/log/ssh_tunnel.log # ssh rrv@192.168.0.1 - тоже из предыдущего примера /bin/ps waux | /bin/grep -v grep | /bin/grep "ssh rrv@192.168.0.1" \ | /usr/bin/awk '{system ("kill -9 "$2" && echo Процесс убит")}' >> /var/log/ssh_tunnel.log echo "" >> /var/log/ssh_tunnel.log fi
Запуск скрипта добавляем в cron