Набор команд для работы с SSH на все случаи жизни

SSH (англ. Secure SHell - «безопасная оболочка») – протокол передачи данных, позволяющий производить безопасное и защищенное управление операционной системой и данными. Это сетевой протокол прикладного уровня, который дает возможность шифрования передаваемых данных и паролей. К тому же позволяет передавать любой другой протокол.

Первая версия протокола SSH была разработана аж в 1995 году. С тех пор были обнаружены некоторые слабые места и программа претерпела ряд существенных изменений. Таким образом, уже через год, в 1996 году, в свет вышла вторая версия SSH – 2. Она не совместима с первой версией и, говоря о SSH сегодня, всегда подразумевается SSH – 2. С тех пор SSH не изменила значительно стандарты своей работы и широко используется по сей день.

SSH является сугубо коммерческим продуктом и предоставляется на платной основе. Однако повсеместно доступна и ее бесплатная версия, которая носит название OpenSSH. Не смотря на то, что OpenSSH является лишь одной из версий SSH, она намного чаще используется программистами. Некоторые даже считают, то он более безопасен и удобен в использовании, благодаря своему открытому исходному коду.

Возможности SSH

  • Позволяет удаленно работать на компьютере через командную оболочку.
  • Позволяет осуществлять шифрование с помощью различных алгоритмов.
  • Так как SSH позволяет безопасно передавать практически любой сетевой протокол, это позволяет передавать по шифрованному каналу звуковые и видео файлы.
  • Производит сжатие файлов для их последующего шифрования и передачи.
  • Защищает передачу данных по каналу и предотвращает возможность включения в установленную сессию и перехватить данные.

Необходимое ПО для работы с SSH

Для работы с SSH необходим SSH-сервер и SSH-клиент .

SSH-сервер принимает соединение от клиентских машин и производит аутентификацию. Аутентификация на SSH производится тремя способами:

  1. По IP адресу клиента – при этом SSH использует несколько методов проверки. Способ не очень безопасный, так как существует возможность подмены IP адреса.
  2. По публичному ключу клиента – схема почти такая же, как при проверке IP адреса клиентской машины, только в данном случае проверяется ключ клиента и имя пользователя.
  3. По паролю клиента – часто используемый метод проверки. Пароль в данном случае передается также в зашифрованном виде.

Основными программными платформами, выступающими в роли SSH-сервера являются:

  • BSD: OpenSSH
  • Linux: dropbear, lsh-server, openssh-server, ssh
  • Windows: freeSSHd, copssh, WinSSHD, KpyM Telnet/SSH Server, MobaSSH, OpenSSH

SSH-клиент используется для непосредственного входа на удаленный сервер и выполнения различных команд:

  • Работа с файлами и директориями
  • Работа по просмотру или редактированию файлов
  • Отслеживание процессов работы
  • Работа с архивами
  • Работа с базами данных MySQL

SSH-клиенты и их программные оболочки:

  • GNU/Linux, BSD: kdessh, lsh-client, openssh-client, putty, ssh, Vinagre
  • MS Windows и Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD, XShell
  • MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole
  • Mac OS: NiftyTelnet SSH
  • Java: MindTerm, AppGate Security Server
  • iPhone: i-SSH, ssh (в комплекте с Terminal)
  • Android: connectBot

Не смотря на то, что SSH-клиентов очень много, самыми популярными и часто используемыми являются PuTTY и SecureCRT. PuTTY является наиболее предпочтительным, потому что предоставляется на бесплатной основе.

Кому интересно, я для связи с сервером пользуюсь бесплатной программой WinSCP (свободный графический клиент протоколов SFTP и SCP) - PuTTY агент, которым очень удобно работать по протоколу SSH. Подчеркну, если вы не хотите, чтобы ваши сайты подхватили вирус или еще какую-нибудь заразу, лучше сразу начните использовать WinSCP вместо обычных FTP клиентов (FileZilla), так вы сможете быть уверены, что у вас не уведут пароли.

Безопасное использование SSH

Для того чтобы использовать SSH безопасно создается так называемый SSH – туннель. Он создается на основе SSH и обеспечивает безопасность передачи данных по интернет каналам, шифруя их на одном конце туннеля и расшифровывая на другом.

Необходимо соблюдать несколько правил пользования SSH, чтобы обезопасить свои данные:

  • Запретить возможность удалённого root-доступа.
  • Запретить подключение с пустым паролем или отключение входа по паролю.
  • Необходимо выбирать нестандартный порт для SSH-сервера.
  • Использовать длинные SSH2 RSA-ключи.
  • Необходимо строго ограничить количество IP-адресов, с которых разрешён доступ.
  • Запретить доступа с опасных адресов.
  • Регулярно отслеживать сообщения об ошибках аутентификации.
  • Установить системы обнаружения вторжений (IDS - Intrusion Detection System).
  • Использовать специальные ловушки, подделывающих SSH-сервис (honeypots).

Хостинг SSH

К сожалению, сегодня не все хостинг компании осуществляют поддержку SSH. Если вы обладатель одного единственного сайта в интернете и еще плохо понимаете, что такое SSH и зачем он нужен, то возможно вы не сильно в нем нуждаетесь. А если вы уже опытный пользователь, который частенько просиживает штаны за компьютером, пока сервер осуществлял обмен файлами через FTP, то, скорее всего, вы мечтали о SSH всю свою ftp-обменную жизнь.

На самом деле – это очень удобная штука и вы вскоре сами в этом убедитесь. Наступит время, когда вам необходимо будет перенести свой проект или несколько проектов с локального сервера на сервер хостинг-провайдера, либо с сервера одного хостинг-провайдера на сервер другого хостинг-провайдера. Вот здесь вам и поможет SSH.

К тому же SSH позволяет редактировать файлы на сервере и удалять их одним щелчком.

Именно это делает хостинг с возможностью использования SSH таким желанным. При выборе хостинг провайдера обратите внимание на этот немаловажный критерий. Поверьте, это поможет вам сэкономить кучу времени и нервов, и к тому же обезопасит ваши данные от потери.

Американский хостинг, который поддерживает SSH.

SSH - это очень распространенный инструмент для системных администраторов. Наверное почти каждый день им пользуются тысячи, используют SSH для подключения к своим серверам, домашнему компьютеру, роутеру или смартфону. SSH-клиенты доступны для большинства популярных платформ, главное чтобы вы знали о всех возможностях SSH и понимали как их применить и где.

OpenSSH был выпущен разработчиками OpenBSD в далеком 1999 году, много времени уже прошло, на сегодня OpenSSH стал стандартом безопасного и подключения к удаленной машине. Сидя в дома, вы можете удаленно админить сервера компании в которой вы работаете, так работают сотни тысяч админов по всему миру и все это благодаря разработчиками OpenBSD который создали OpenSSH. Прошло семнадцать лет с момент разработки OpenSSH, появилось много новых возможностей, возможность настройки и различных режимов работы, и много прочих возможностей о которых не все знают.

Сегодня я постараюсь описать некоторые из возможностей, не все конечно так как для этого не хватит одного материала. Ниже мы рассмотрим небольшую подборку из 20 команд или более правильно выразиться рецептов, которыми вы можешь пользоваться как шпаргалкой в будущем. Эти команды доступны для работы как в Linux, так и в большинстве других ОС, которые имеют сборку OpenSSH. Чтобы не запутать, уточню, что удaленный пользователь и хост в материале ниже мы всегда обозначаем как либо по отдельности как и .

1. Возможность быстрого запуска команд

Если вы хотите выполнить всего одну удаленную команду, не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:

Ssh df -h

А так - перезагрузить ее:

Ssh sudo reboot

2. Запуск списка команд

Если у тебя есть целый список команд, которые следует выполнить, их можно записать в файл и скормить этот файл SSH:

Ssh "`cat file.txt`"

3. Удаленные редактирование файлов локальным редактором

Чтобы отредактировать файл на удаленной машине, не обязательно заходить на нее и иcпользовать консольный редактор(vim/nano итд). Вы можете открыть на редактирование файл одним из текстовых редакторов которые установлены у вас на локальной машине (gedit заменяем на свой редактор):

Gedit scp:// //путь/к/файлу

4. Копирование содержимое удаленного файла в буфер обмена

Если вам нужно скопировать содержимое определенного файла который находится на одном из серверов или удаленной машине, не обязательно выводить содержимое на экран или открывать в вашем текстовом редакторе и копировать вручную. Можно поступить более оригинально и скопировать в буфер, используем команду ниже:

Ssh cat /путь/к/файлу | xclip

Как вариант скопировать вывод команды:

Ssh uname -a | xclip

5. Сравнение удаленного и локального файлов без копирования

Для данной задачи вы можно использовать небольшой прием, смотрим команду ниже:

Ssh cat /путь/к/удаленному/файлу | diff /путь/к/локальному/файлу -

6. Работа с удаленными файлaми используя локальный файловый менеджер

Работая с большим количеством файлов, не удобно для этого использовать консольные команды или mc который запущен на удаленной машине. Но вы всегда можно подключить любой из каталогов удаленной машины например как сетевой диск. Это вы можете осуществить используя утилиту sshfs:

Sudo apt install sshfs

Создаем каталог для подключения «сетевого диска»:

Mkdir remote_files

8. Как быстро скопировать ключи

Копирование публичного ключа на удаленный сервер не простая задача, так как требует выполнения нескольких действий вручную. Этот процесс можно упростить и скопировать ключ в автоматическом режиме:

Ssh-copy-id

Не обязательно копировать основной ключ, используя флаг -i можно указать любой другой:

Ssh-copy-id -i ~/my_key.pub

9. Создаем стабильное соединение с машиной

Если вы в течение дня часто подключаетесь к одной машине, на несколько минут или секунд (чтобы просто запустить одну команду), с ней можно создать постоянное соединение. Ваш компьютер будет держать соединение открытым и использовать его для каждого подключения к машине. Это намного быстрее и экономичнее с точки зрения трафика и нагрузки на процессор.

Добавьте следующие строки в ~/.ssh/config:

Host host ControlPath ~/.ssh/master-% %h:%p ControlMaster no

А затем создайте соединение:

Ssh -MNf

10. Используем версию SSH для неустойчивых соeдинений

SSH создан для работы с использованием стабильного соединения и не рассчитан на работу с использованием неустойчивого интернет-соединения, в связи с чем не умеет реагировать на потерю пакетов. Если у вас соединение оборвется, SSH повиснет и будет находиться в таком состоянии, пока не закончится тайм-аут. До тех пор пока вы используете надежное оптоволоконное соединение, это не будет проблемой, но как только вы попадете в условия где нет покрытия кабельного интернета, 3G для вас будет казаться экзотикой, в следствии чего SSH превратится в невыносимо тупой инструмент.

Решить проблему можно используя autossh . Это обертка над SSH, которая позволяет проверять жизнеспособность канала. Autossh создает дополнительное SSH-соединение с сервером и непрерывно шлет по нему heartbeat-пакеты. Если пакет не доходит до адресата, autossh считает канал мертвым и перезапускает SSH-соединение.

Пользоваться очень просто:

Sudo apt install autossh autossh -M5000

По дефолту тайм-аут между отправкой heartbeat-пакeтов составляет десять минут, что очень много. Если вы хотите уменьшить тайм-аут пропиши его в переменную AUTOSSH_POLL перед запуском autossh (значение в секундах):

Export AUTOSSH_POLL=10

Либо используем вариант еще лучше предыдущего: mosh . Оптимизированная для неустойчивых и низкоскоростных соединений версия SSH, работающая по протоколу UDP. Mosh позволяет получить быстрое и отзывчивое соединение даже на очень медленном канале, из коробки позволяет поднимать упавшее соединения, переключать клиента с одного IP на другой (при переключении с Wi-Fi-соединения на мобильное, например) без перезапуска сессии.

Mosh имеет вcего один недостаток: он требует установки не только на локальную машину, но и на удаленную. Зато после этого ничего настраивaть не нужно, достаточно использовать команду mosh вместо ssh. Более того, mosh уже встроeн в SSH-клиенты JuiceSSH для Android и Blink для iOS.

11. Открываем порт SSH лишь по необходимости

Работая с SSH порт вашего сервера в ближайшем будущем станет целью большого количества ботов, которые будут пытаться к нему подключаться или же подобрать пароль, даже если вы отключили аутентификацию по паролю. Как бороться с ботами? Для этой задачи у нас есть два способа: первым способом будет установка утилиты fail2ban которая поможет автоматически отшибать особо надоедливых ботов, второй способ, это конечно же открывать порт только тогда, когда вам это необходимо.

Если вы подключаетесь к серверу нечаcто, второй способ идеален. Идея в том, что на сервер устанавливается специальный демон, который слушает указанные порты и в случае соединения с этими портами в определенном порядке откроет 22-й порт. Другой порядок соединения будет закрывать порт.

Техника называется port knoking и реализуется с помощью демона knockd. Установка демона на сервер:

Sudo apt install knockd

Настройка демона, добавьте в файл конфиг /etc/knockd.conf следующие строки:

Logfile = /var/log/knockd.log sequence = 3000,4000,5000 seq_timeout = 5 command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn sequence = 5000,4000,3000 seq_timeout = 5 command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn

Перезапустим демон:

Sudo /etc/init.d/knockd restart

Теперь используем следующую команду для подключения к серверу:

Knock 3000 4000 5000 && ssh && knock 5000 4000 3000

Она позволит открыть порт перед SSH-соединениeм и закрыть его после закрытия сессии. Стоит обратить внимание, что в настройках брандмауэра SSH-порт должен быть закрыт.

12. Защищаемся от брутфорса

Установка fail2ban - второй метод защиты от ботов которые подбирают пароли. Демон Fail2ban, имеет основную задачу, непрерывно мониторить логи сетевых служб (Apache, vsftpd, SSH…) где он проверяет, ищет вредителей которые слишком часто пытаются аутентифицироваться и блокирует их IP (три неудачные попытки подряд и в бан на десять минут).

Преимущество fail2ban в том, что он не нуждается в настройке и начинает работать сразу же после установки. Все, что надо сделать, - это установить пакет:

Sudo apt install fail2ban

Используя SSH, вы можете легко проверить скорость вашего соeдинения с машиной. Для этой задачи можно использовать утилиту pv (pipe viewer). Смотрим пример команды ниже:

Yes | pv | ssh "cat > /dev/null"

14. Используем SSH как SOCKS-прокси

SSH очень легко изменить в SOCKS-прокси, который будет пересылать ваши данные между локальной машиной и SSH-сервером через зашифрованный канал. Для этого вам нужно сделать следующее, - запустить SSH-клиент с флагом -D, пoсле которого указать номер SOCKS-порта (флаг -C включает принудительное сжатие трафика):

Ssh -D 9999 -C

15. Обходим файрволы

В дополнение к SOCKS-прокси, SSH имеет функцию прозрачного «проброса портов». Работает примерно так: на локальной машине открывается порт. Трафик, который будет передаваться на этот порт, прозрачно проксируется через удалeнную машину и направляется на указанный хост:порт. Приведу пример: ваш твой начальник заблокировал доступ к linuxsoid.com на уровне корпоративного файрвола. Но вы можете обойти это ограничение, используя удаленный SSH-сервер:

Ssh -L8080:linuxsoid.com:80

Теперь все подключения к localhost:8080 будут перенаправляться на linuxsoid.com:80.

16. Сохраняем настройки подключения к хостам

Если вы работаете с большим количеством хостов используя имя разных юзеров и к всему этому используете разные ключи, вы можете существенно упростишь вашу жизнь, если создадите для этих хоcтов шорткаты. Например, следующие строки ~/.ssh/config описывают два хоста:

  • site.com, SSH-сервер на кoтором «висит» на порту 2222, а в качестве ключа используется ~/my_key.pem ;
  • 192.168.0.1, с SSH-сервером на стандартнoм порту, юзером root и принудительным отключением аутентификации с помощью ключа. Host server1 HostName site.com Port 2222 User user IdentityFile ~/my_key.pem Host server2 HostName 192.168.0.1 User root PubkeyAuthentication no

Теперь, чтобы подключиться к site.com, нет нужды нaбирать длинную команду:

Ssh -i ~/my_key.pem -p 2222

Вы можете использовать шорткат:

Ssh server1

17. Подключаемся к удаленной машине через другую машину

Например, у вас есть доступ к host1, но вы не имеете доступа к host2 (он за файрволом), но доступ к host2 имеется у host1. В итоге вы можете подключиться к host2 вот так:

Ssh -t ssh

18. Копиpуем файлы с удаленной машины на другую машину через свою

Примерно такая же история как и при подключении к удаленной машине через другой компьютер. У вас есть файл который необходимо скопировать с host1 на host2, но они не могут друг с другом общаться. В данном случае, вы можете скопировать файл используя локальную машину:

Ssh "cd /копируемый/каталог/ && tar -cf - ." | ssh "cd /куда/копировать/ && tar -xf -"

19. Запуск графических приложений

Linux/BSD используют ту же клиент-серверную оконную систему X Window System, которая изначально разрабатывалась для запуска графических приложений на мейнфрейме с выводом изображения на экран клиента. Поэтому она из коробки позволяет запускать приложения на удаленной машине так, чтобы их вывoд был перенаправлен на локальную. SSH умеет форвардить протокол X, так что его можно использовать для запуска не только консольных, но графических приложений:

Ssh -X firefox

20. Прослушивание музыки с удаленной машины

Немного надуманный, но в целом довольно интересный трюк:

Ssh "cat /home/user/music/*.mp3" | mpg123 -

Своего рода интернет-радио для одного.

Выводы

SSH - это сложная и очень развитая штука. Все двадцать советов, что описаны выше - это всего лишь часть, на что способен этот инструмент.

(перевод) :

В компьютерных сетях 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 адрес, если только не используется никакой локальный DNS сервер. Мы используем статический IP для примера:

ListenAddress 192.168.2.134

Хотя версия 2 протокола ssh установлена в Debian по умолчанию, но, конечно, стоит удостовериться в этом еще раз.

LoginGraceTime <временной промежуток процесса регистрации>: позволенный для регистрации промежуток времени составляет как стандарт абсурдные 600 секунд. Так как 10 минут явно избыточны, чтобы ввести имя пользователя и пароль, мы установим несколько более благоразумный промежуток времени:

LoginGraceTime 45

Теперь имеется 45 секунд для входа, и хакер не имеет 10 минут на каждую попытку взломать пароль.

PermitRootLogin : почему здесь Debian выдал разрешение на вход в систему как root, не объяснимо. Мы исправляем на "no":

PermitRootLogin no StrictModes yes

MaxAuthTries <количество позволенных попыток регистрации>: Вы не должны устанавливать больше чем 3 или 4:

MaxAuthTries 2

Следующие установки должны быть добавлены, так как они отсутствуют по умолчанию:

AllowUsers: имена пользователей, которым позволен доступ через ssh, разделенные символом пробела

AllowUsers : только зарегистрированные пользователи могут использовать доступ, и только с пользовательскими правами. С adduser можно добавить пользователя специально для использования ssh:

AllowUsers werauchimmer

PermitEmptyPasswords : дает Вашему пользователю прекрасный длинный пароль, который за миллионы лет нельзя было бы подобрать. Пользователь с доступом ssh должен быть единственным. Если он уже зарегистрирован, то может с su стать root:

PermitEmptyPasswords no

PasswordAuthentication : конечно, должено иметь значение "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 [email protected]

Помните: 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

2) Enter into the address bar: sftp://[email protected]

При­мер 1: Во всплывающем окне будет запрошен пароль ssh, введите пароль и нажмите ОК:

Sftp://[email protected]

Пример 2: непосредственное соединение, без запроса пароля

Sftp://username:[email protected]

Применение в локальной сети

Sftp://[email protected] 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#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 port:host:hostport

или с поддержкой туннеля:

Ssh -o TCPKeepAlive=yes -o ServerAliveInterval=15 -o ServerAliveCountMax=10 server_user@server_ip -R port:host:hostport

например

Ssh [email protected] -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.

Проверка работы туннеля

Скрипт для проверки туннеля:

#!/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 [email protected] - тоже из предыдущего примера /bin/ps waux | /bin/grep -v grep | /bin/grep "ssh [email protected] " \ | /usr/bin/awk "{system ("kill -9 "$2" && echo Процесс убит")}" >> /var/log/ssh_tunnel.log echo "" >> /var/log/ssh_tunnel.log fi

Запуск скрипта добавляем в cron

Все больше людей, и не только веб-мастеров, но и обычных пользователей интернета, задаются вопросом, что такое SSH? Если честно, даже радует, что люди начинают интересоваться такими вопросами, интернет-просвещение — это всегда хорошо. Итак, SSH — это сетевой протокол для удаленного управления компьютером, в нашем случае сервером. Говоря «в нашем» я имею в виду в случае с веб-мастерами. Вот такое несложное определение непонятной на первый взгляд аббревиатуры. Но давайте копнем глубже, что же скрывается под этим понятием?

Если честно, я, хоть и приличное время занимаюсь созданием сайтов, протоколом SSH стал пользоваться относительно недавно. Слышал и читал, конечно, о нем не раз, но особой нужды использовать его не было. Но на днях на нескольких моих сайтах яндекс обнаружил потенциально опасный код и стал выводить их в поиске с пометкой «Этот сайт может угрожать безопасности вашего компьютера». Посещаемость резко снизилась, доходы тоже. Такое случалось с моими сайтами и раньше, но тогда я знал в чем дело, так как сам вставлял код на сайт, изначально, конечно, не подозревая о его «вредоносности». Но в этот раз все оказалось гораздо труднее. Мне понадобился протокол SSH для лечения сайтов. Я обязательно об этом еще расскажу, но в другой статье. Так что подписывайтесь на и ждите, ведь безопасность ваших сайтов превыше всего.

SSH клиент

Передо мной, как и перед многими веб-мастерами в аналогичных ситуациях, встал вопрос о том, как подключиться к серверу по SSH. Все оказалось гораздо проще, чем я изначально думал. Во многом за это стоит сказать «спасибо» моему хостеру Inferno Solutions . В одиночку я справлялся бы гораздо дольше.

В первую очередь нужно выбрать SSH клиент для Windows или другой операционной системы, которой вы пользуетесь. Мой выбор пал на PuTTY . Он бесплатный, достаточно простой в использовании и содержит весь необходимый функционал. Клиент доступен для скачивания . Запускаем программу и видим следующее:

Здесь вам необходимо ввести имя сервера или его ip-адрес в поле Host Name и название сессии в Saved Sessions. Можете назвать сессию аналогично имени сервера, чтобы не путаться. Я именно так и сделал. Чаще всего или выделенные серверы доступны в сети по определенному ip-адресу. Если он вам неизвестен, узнайте его у вашего хостера. После того как данные будут введены, нажмите кнопку Save, чтобы сохранить их, и двойным щелчком мыши по названию сессии начните подключение к серверу.

На следующем шаге вас попросят ввести логин и пароль. Вы можете ввести как root и пароль от входа на ваш сервер, так и логин любого созданного вами пользователя и его пароль от входа по . Чуть не забыл, по пользовательским данным вас могут и не пустить, как сначала произошло в моем случае. Если вы столкнулись с аналогичной ситуацией, то зайдите на свой сервер через панельку (ISPmanager) и отредактируйте права пользователя. Вам требуется поставить галочку в пункте «Доступ к shell», если она отсутствует.


После этих несложных действий вы подключитесь к требуемому серверу по SSH. Через интерфейс PuTTY или другого клиента вы сможете зайти в любой каталог на сервере, создать, удалить, переместить или загрузить файл, создать новую папку и многое другое. Но для этого вам потребуется знание определенных команд.

SSH команды

Всего SSH команд достаточно много — около 50-60 точно. Я знаю и пользуюсь лишь частью из них. Вряд ли вам понадобится больше. Итак, поехали:

  • ls — отобразить файлы и папки;
  • cd — перейти в корневой каталог;
  • cd .. — перейти в каталог уровнем выше;
  • cd papka1/papka2 — перейти в указанную папку;
  • pwd — показать путь к текущему расположению;
  • cp — копировать файл;
  • rm — удалить файл;
  • mv — переместить файл;
  • mkdir — создать новую папку;
  • rmdir — удалить папку;
  • get — загрузить файл на локальный компьютер;
  • put — загрузить файл на удаленный компьютер;
  • exit — завершить сессию и выйти из программы;
  • help — список всех команд.

Вот такие вот несложные существуют SSH команды. Интерфейс клиента PuTTY, как и аналогичных ему, визуально, конечно, не очень привлекателен, но зато прост и удобен в использовании. Достаточно потренироваться 5-10 минут с командами, чтобы освоить программу.

Теперь стало более или менее понятно, как подключаться к северу по SSH, и зачем вообще это нужно? Надеюсь, что да. В следующих постах я покажу вам конкретные примеры использования протокола SSH. Поверьте, этот функционал очень полезен. Не стоит им пренебрегать. Так что, пользуйтесь на здоровье!

Или сокращенно SSH, является одной из самых передовых технологий защиты данных при передаче. Использование такого режима на том же маршрутизаторе позволяет обеспечить не только конфиденциальность передаваемой информации, но и ускорить обмен пакетами. Правда, далеко не все знают, как SSH и зачем все это нужно. В данном случае придется дать конструктивное пояснение.

Порт SSH: что это и зачем нужно?

Поскольку речь идет о безопасности, в данном случае под портом SSH следует понимать выделенный канал связи в виде туннеля, обеспечивающего шифрование данных.

Самая примитивная схема работы такого туннеля состоит в том, что по умолчанию используется для зашифровки информации в источнике и дешифровке на конечной точке. Пояснить это можно так: хотите вы этого или нет, передаваемый траффик, в отличие от IPSec, шифруется в принудительном порядке и на выходе одного сетевого терминала, и на входе принимающей стороны. Для расшифровки информации, передаваемой по данному каналу, принимающий терминал использует специальный ключ. Иными словами, вмешаться в передачу или нарушить целостность передаваемых данных на текущий момент без ключа не может никто.

Как раз открытие SSH-порта на любом маршрутизаторе или при помощи соответствующих настроек дополнительного клиента, взаимодействующего с SSH-сервером напрямую, позволяет в полной мере использовать все возможности системы безопасности современных сетей. Речь тут о том, чтобы использовать порт, назначенный по умолчанию, или пользовательские настройки. Эти параметры в применении могут выглядеть достаточно сложно, однако без понимания организации такого подключения здесь не обойтись.

Стандартный порт SSH

Если действительно исходить из параметров любого маршрутизатора, для начала следует определиться с тем, какое именно программное обеспечение будет использоваться для задействования этого канала связи. Собственно, и порт SSH по умолчанию может иметь разные настройки. Все зависит о того, какая методика применяется в данный момент (прямое соединение с сервером, установка дополнительного клиента, проброс портов и т. д.).


Так, например, если в качестве клиента применяется Jabber, для корректного соединения, шифрования и передачи данных должен использоваться порт 443, хотя в стандартном варианте устанавливается порт 22.


Чтобы перенастроить маршрутизатор с выделением для определенной программы или процесса необходимых условий, придется выполнить SSH. есть назначение определенного доступа для отдельно взятой программы, которая использует подключение к Интернету, вне зависимости от того, какие настройки имеет текущий протокол обмена данными (IPv4 или IPv6).

Техническое обоснование

Как уже понятно, стандартный порт SSH 22 используется не всегда. Однако тут нужно выделить некоторые характеристики и параметры, используемые при настройке.


Почему конфиденциальность передачи зашифрованных данных предполагает использование протокола SSH в виде исключительно внешнего (гостевого) пользовательского порта? Да только потому, что применяемое туннелирование позволяет использовать так называемую удаленную оболочку (SSH), получить доступ к управлению терминалом посредством удаленного входа в систему (slogin), а также применять процедуры удаленного копирования (scp).

Кроме того, SSH-порт может быть задействован и в том случае, когда у пользователя возникает необходимость выполнения удаленных сценариев X Windows, что в самом простом случае представляет собой передачу информации с одной машины на другую, как уже говорилось, с принудительным шифрованием данных. В таких ситуациях самым необходимым станет использование алгоритмов на основе AES. Это есть алгоритм симметричного шифрования, которое изначально предусмотрено в технологии SSH. И использовать его не только можно, но и нужно.

История реализации

Сама технология появилась достаточно давно. Оставим пока в стороне вопрос того, как сделать проброс портов SSH, а остановимся на том, как все это работает.

Обычно все сводится к тому, чтобы использовать прокси на основе Socks или применить туннелирование VPN. В случае если какое-то программное приложение умеет работать с VPN, лучше предпочесть именно этот вариант. Дело в том, что практически все известные на сегодня программы, использующие интернет-траффик, с VPN работать могут, а настройка маршрутизации особого труда не составляет. Это, как и в случае с прокси-серверами, позволяет оставить внешний адрес терминала, с которого в данный момент производится выход в сеть, неузнанным. То есть в случае с прокси адрес меняется постоянно, а в варианте VPN остается неизменным с фиксацией определённого региона, отличного от того, где действует запрет доступа.

Сама же технология, когда открывается порт SSH, была разработана еще в 1995 году в Технологическом университете Финляндии (SSH-1). В 1996 году было добавлено усовершенствование в виде протокола SSH-2, который получил достаточно большое распространение на постсоветском пространстве, хотя для этого, равно как и в некоторых странах Западной Европы, иногда необходимо получение разрешения на использование такого туннеля, причем от государственных органов.

Основным преимуществом открытия SSH-порта, в отличие от telnet или rlogin, считается применение цифровой подписи RSA или DSA (использование пары в виде открытого и зарытого ключа). Кроме того, в данной ситуации может использовать так называемый сеансовый ключ на основе алгоритма Диффи-Хеллмана, который подразумевает применение симметричного шифрования на выходе, хотя и не исключает использование алгоритмов асимметричного шифрования в процессе передачи данных и их приема другой машиной.

Серверы и оболочки

В Windows или в Linux SSH-порт открыть не так уж и трудно. Вопрос только в том, какой именно инструментарий для этого будет использоваться.

В этом смысле нужно обратить внимание на вопрос передачи информации и аутентификации. Во-первых, сам протокол оказывается достаточно защищенным от так называемого снифинга, представляющего собой самую обычную «прослушку» траффика. SSH-1 оказался беззащитным перед атаками. Вмешательство в процесс передачи данных в виде схемы «человек посередине» имело свои результаты. Информацию можно было просто перехватить и расшифровать совершенно элементарно. Зато вторая версия (SSH-2) была застрахована от подобного рода вмешательства, называемого session hijacking, благодаря чему и получила наибольшее распространение.

Запреты системы безопасности

Что же касается безопасности в отношении передаваемых и принимаемых данных, организация подключения, созданного с применением таких технологий, позволяет избежать появления следующих проблем:

  • определение ключа к хосту на стадии передачи, когда используется «слепок» fingerprint;
  • поддержка Windows и UNIX-подобных систем;
  • подмена адресов IP и DNS (spoofing);
  • перехват открытых паролей при физическом доступе к каналу передачи данных.

Собственно, вся организация такой системы построена по принципу «клиент-сервер», то есть в первую очередь пользовательская машина посредством специальной программы или надстройки обращается к серверу, который и производит соответствующее перенаправление.

Туннелирование

Само собой разумеется, что для осуществления подключения такого рода в системе должен быть установлен специальный драйвер.

Как правило, в Windows-системах это встроенный в программную оболочку драйвер Microsoft Teredo, представляющий собой некое виртуальное средство эмулирования протокола IPv6 в сетях с поддержкой только IPv4. по умолчанию находится в активном состоянии. В случае появления сбоев, с ним связанных, можно просто произвести перезапуск системы или выполнить команды отключения и рестарта в командной консоли. Для деактивации используются такие строки:

  • netsh;
  • interface teredo set state disabled;
  • interface isatap set state disabled.

После ввода команд следует перезагрузка. Для повторного включения адаптера и проверки его состояния вместо disabled прописывается разрешение enabled, после чего, опять же, следует рестарт всей системы.

SSH-сервер

Теперь посмотрим, какой порт SSH используется в качестве основного, отталкиваясь от схемы «клиент-сервер». Обычно по умолчанию применяется 22-й порт, но, как уже было указано выше, может использовать и 443-й. Вопрос только в предпочтении самого сервера.

Самыми распространенными SSH-серверами принято считать следующие:

  • для Windows: Tectia SSH Server, OpenSSH с Cygwin, MobaSSH, KpyM Telnet/SSH Server, WinSSHD, copssh, freeSSHd;
  • для FreeBSD: OpenSSH;
  • для Linux: Tectia SSH Server, ssh, openssh-server, lsh-server, dropbear.

Все приведенные серверы являются бесплатными. Однако можно найти и платные услуги, которые отличаются повышенным уровнем системы безопасности, что крайне необходимо для организации сетевого доступа и защиты информации на предприятиях. Стоимость таких услуг сейчас не обсуждается. Но в общем и целом можно сказать, что это относительно недорого, даже по сравнению с установкой специализированного программного или «железного» файрвола.

SSH-клиент

Смена порта SSH сможет производиться на основе клиентской программы или соответствующих настроек при пробросе портов на маршрутизаторе.

Однако, если касаться клиентских оболочек, для разных систем могут применяться следующие программные продукты:

  • Windows - SecureCRT, PuTTY\KiTTY, Axessh, ShellGuard, SSHWindows, ZOC, XShell, ProSSHD и т. д.;
  • Mac OS X: iTerm2, vSSH, NiftyTelnet SSH;
  • Linux и BSD: lsh-client, kdessh, openssh-client, Vinagre, putty.

Аутентификация на основе открытых ключей и изменение порта

Теперь несколько слов о том, как происходит верификация и настройка сервера. В самом простом случае необходимо использовать файл конфигурации (sshd_config). Однако можно обойтись и без этого, например, в случае использования программ вроде PuTTY. Изменить порт SSH со стандартного значения (22) на любое другое можно совершенно элементарно.


Главное - чтобы номер открываемого порта не превышал значение 65535 (выше портов просто не бывает в природе). К тому же следует обратить внимание на некоторые открытые по умолчанию порты, которые могут использоваться клиентами вроде MySQL или базами данных FTPD. Если указать для SSH их конфигурацию, понятное дело, те просто перестанут работать.

Стоит учесть, что тот же клиент Jabber должен быть запущен в одной среде с использованием SSH-сервера, например, на виртуальной машине. А самому серверу localhost необходимо будет присвоение значения 4430 (а не 443, как было указано выше). Такая конфигурация может использоваться в том случае, когда доступ к основному файлу jabber.example.com блокируется файрволом.


С другой стороны, перебросить порты можно и на самом маршрутизаторе, используя для этого настройки его интерфейса с созданием правил исключения. На большинстве моделей вход осуществляется через ввод адресов, начинающихся с 192.168 с добавлением 0.1 или 1.1, но на роутерах, совмещающих возможности ADSL-модемов вроде Mikrotik, конечный адрес предполагает использование 88.1.

В этом случае создается новое правило, после этого устанавливаются необходимые параметры, например, для установки внешнего подключения dst-nat, а также вручную прописываются порты не в разделе общих настроек, и в разделе предпочтений активных действий (Action). Ничего особо сложного здесь нет. Главное - указать необходимые значения настроек и установить правильный порт. По умолчанию можно использовать порт 22, но, если используется специализированный клиент (какой-то из вышеуказанных для разных систем), значение можно менять произвольно, но только так, чтобы этот параметр не превышал заявленное значение, выше которого номера портов просто отсутствуют.

При настройке подключения также стоит обратить внимание на параметры клиентской программы. Очень может быть, что в ее настройках придется указать минимальную длину ключа (512), хотя по умолчанию обычно установлено 768. Также желательно установить таймаут входа в систему на уровне 600 секунд и разрешение на удаленный доступ с использованием прав root. После применения таких настроек необходимо дать еще и разрешение на использование всех прав аутентификации, кроме тех, которые основаны на использовании.rhost (но это нужно лишь системным администраторам).

Кроме всего прочего, если имя пользователя, зарегистрированного в системе, не совпадает с вводимым в данный момент, нужно будет указать его явно, используя для этого команду user ssh master с вводом дополнительных параметров (для тех, кто понимает, о чем идет речь).


Для преобразования ключа и самого метода шифрования может применяться команда ~/.ssh/id_dsa (или rsa). Для создания публичного ключа используется преобразование при помощи строки ~/.ssh/identity.pub (но это не обязательно). Но, как показывает практика, проще всего использовать команды вроде ssh-keygen. Тут суть вопроса сводится только к тому, чтобы добавить ключ к доступным инструментам авторизации (~/.ssh/authorized_keys).

Но мы зашли слишком далеко. Если возвращаться к вопросу настройки порта SSH, как уже понятно, изменить порт SSH не так уж и сложно. Правда, в некоторых ситуациях, что называется, придется попотеть, поскольку нужно будет учесть все значения основных параметров. В остальном же вопрос настройки сводится либо ко входу в серверную или клиентскую программу (если это предусмотрено изначально), либо к использованию проброса портов на маршрутизаторе. Но даже в случае изменения порта 22, установленного по умолчанию, на тот же 443-й, нужно четко понимать, что такая схема работает не всегда, а только в случае с установкой той же надстройки Jabber (другие аналоги могут задействовать и соответствующие им порты, отличающиеся от стандартных). Кроме того, особое внимание следует уделить выставлению параметров SSH-клиента, который будет непосредственно взаимодействовать с SSH-сервером, если таковое действительно предполагается в использовании текущего подключения.

В остальном же, если проброс портов не предусмотрен изначально (хотя желательно выполнить такие действия), настройки и параметры для доступа по протоколу SSH можно и не менять. Тут особых проблем при создании соединения и его дальнейшем использовании, в общем-то, не предвидится (если, конечно, не будет использоваться ручная настройка конфигурации на основе сервера и клиента). Самое обычное создание правила исключения на роутере позволяет исправить все проблемы или избежать их появления.