Как Ваш компьютер может дать доступ к себе через туннель средствами ssh, autossh, autosshd: различия между версиями
м (→Автоматический туннель: форматирование) |
м (форматирование и добавки) |
||
Строка 7: | Строка 7: | ||
====вы: ваш ключ, которому я позволю делать туннель у меня==== | ====вы: ваш ключ, которому я позволю делать туннель у меня==== | ||
'''(делает обычный пользователь, не root)''' | '''(делает обычный пользователь, не root)''' | ||
* ssh-keygen -f ~/.ssh/id_for_tunnel -C 'tunnel wanted by NAME' | * {{cmd|ssh-keygen -f ~/.ssh/id_for_tunnel -C 'tunnel wanted by NAME'}} | ||
* Сообщите мне его открытую (т.н. "публичную") часть: cat ~/.ssh/id_for_tunnel.pub | * Сообщите мне его открытую (т.н. "публичную") часть: {{cmd|cat ~/.ssh/id_for_tunnel.pub}} | ||
====с моей стороны: пользователь и порт для туннеля==== | ====с моей стороны: пользователь и порт для туннеля==== | ||
'''(делает администратор)''' | '''(делает администратор)''' | ||
* useradd -m tun_NAME | * {{cmd|useradd -m tun_NAME}} | ||
* Позволяю входить по вашему ключу: cat >> ~tun_NAME/.ssh/authorized_keys | * Позволяю входить по вашему ключу: {{cmd|cat >> ~tun_NAME/.ssh/authorized_keys}} | ||
* '''TODO:''' Хорошо бы ещё запретить этому специальному пользователю (для обслуживания туннеля с моей стороны) запрещать выполнять любые команды из-под {{prg|ssh}}, запускать командную оболочку, входить для иных целей, помимо туннеля. | |||
* Выбираю у себя номер порта и сообщаю его вам. (Пусть он обозначается PORT_NAME.) Возможна конфигурация, когда порт выбирается автоматически (как в конфигурации ниже); тогда заранее договариваться о номере порта не надо. | * Выбираю у себя номер порта и сообщаю его вам. (Пусть он обозначается PORT_NAME.) Возможна конфигурация, когда порт выбирается автоматически (как в конфигурации ниже); тогда заранее договариваться о номере порта не надо. | ||
Строка 19: | Строка 20: | ||
'''(делает тот же обычный пользователь, не root)''' | '''(делает тот же обычный пользователь, не root)''' | ||
* Впишите в ~/.ssh/config конфигурацию (например, cat >> ~/.ssh/config -- дописывает в конец файла; потом Ctrl-D), о которой мы договорились: | * Впишите в {{path|~/.ssh/config}} конфигурацию (например, {{cmd|cat >> ~/.ssh/config}} -- дописывает в конец файла; потом <kbd>Ctrl-D</kbd>), о которой мы договорились: | ||
Host imz_tunnel | Host imz_tunnel | ||
Строка 35: | Строка 36: | ||
(NAME нужно заменить на имя, выделенное для вас.) | (NAME нужно заменить на имя, выделенное для вас.) | ||
Отредактировать ~/.ssh/config можно каким-нибудь текстовым редактором<ref>Какой-нибудь текстовый редактор: например, medit в [[Simply Linux]]: medit ~/.ssh/config; или, например, emacs -- [[Управление пакетами|пакет с ним можно поставить]], если он не стоит.</ref>. | Отредактировать {{path|~/.ssh/config}} можно каким-нибудь текстовым редактором<ref>Какой-нибудь текстовый редактор: например, {{prg|medit}} в [[Simply Linux]]: {{cmd|medit ~/.ssh/config}}; или, например, {{prg|emacs}} -- [[Управление пакетами|пакет с ним можно поставить]], если он не стоит.</ref>. | ||
===Запуск туннеля=== | ===Запуск туннеля=== | ||
Строка 55: | Строка 56: | ||
====пользователь для меня и ключ==== | ====пользователь для меня и ключ==== | ||
* useradd -G wheel -m imz (группа wheel нужна, если я должен быть администратором) | * {{cmd|useradd -G wheel -m imz}} (группа wheel нужна, если я должен быть администратором) | ||
* Сообщайте мне пароль root, когда мне нужно администрировать, или добавьте меня в /etc/sudoers.<ref>На самом деле, например, в ALTLinux [[p7]] пользователи из группы wheel и так уже могут пользоваться sudo. Но чтобы пользоваться sudo, нужно иметь свой пароль. Его можете установить вы: passwd imz; или дать это сделать мне, когда я войду и стану администратором через [[su|su -]], узнав от вас ваш пароль root-а.</ref> | * Сообщайте мне пароль root, когда мне нужно администрировать, или добавьте меня в {{path|/etc/sudoers}}.<ref>На самом деле, например, в ALTLinux [[p7]] пользователи из группы wheel и так уже могут пользоваться {{prg|sudo}}. Но чтобы пользоваться {{prg|sudo}}, нужно иметь свой пароль. Его можете установить вы: {{cmd|passwd imz}}; или дать это сделать мне, когда я войду и стану администратором через [[su|{{cmd|su -}}]], узнав от вас ваш пароль root-а.</ref> | ||
* cat >> ~imz/.ssh/authorized_keys | * {{cmd|cat >> ~imz/.ssh/authorized_keys}} | ||
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyUMWCDcoo3xlTilUObv06CKzCO+sj0fLHzIf9aBSa0jheHeknPP850S+65CU1Hds8gm4bLC1DWtDQ2ciIkEfDeKHBKpVpUKKbhs2b263Nw8ZEA1nR+C20lrvNM4XSft9DWpC3Z2pRsOYqs0e1rpUM0OotL15f/OUvhoeIP1fHpKrZPzWZ8tir5VTstL4d2jUZ1w0FJMwnPSK2uQ6hTMLXMfiBj5ZLLgXh+gd23x07i3X9I0AM3Jf6hMsrmpY6NrdhcSLQ12Zap3q7kO3tpR2Q10SobOEFRzKwjxwnrwVk29YWDaCm1L8m3bSbn1nmeMVok5Qquq/qRuTMzIuzsYLdw== imz@vaio | ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyUMWCDcoo3xlTilUObv06CKzCO+sj0fLHzIf9aBSa0jheHeknPP850S+65CU1Hds8gm4bLC1DWtDQ2ciIkEfDeKHBKpVpUKKbhs2b263Nw8ZEA1nR+C20lrvNM4XSft9DWpC3Z2pRsOYqs0e1rpUM0OotL15f/OUvhoeIP1fHpKrZPzWZ8tir5VTstL4d2jUZ1w0FJMwnPSK2uQ6hTMLXMfiBj5ZLLgXh+gd23x07i3X9I0AM3Jf6hMsrmpY6NrdhcSLQ12Zap3q7kO3tpR2Q10SobOEFRzKwjxwnrwVk29YWDaCm1L8m3bSbn1nmeMVok5Qquq/qRuTMzIuzsYLdw== imz@vaio | ||
====ssh-сервер у вас работает?==== | ====ssh-сервер у вас работает?==== | ||
* service sshd status | * {{cmd|service sshd status}} | ||
* Если нет, включите: service sshd start | * Если нет, включите: {{cmd|service sshd start}} | ||
* Если не стоит этот пакет, поставьте: apt-get install openssh-server | * Если не стоит этот пакет, поставьте: {{cmd|apt-get install openssh-server}} | ||
* Включите навсегда: chkconfig sshd on | * Включите навсегда: {{cmd|chkconfig sshd on}} | ||
* Посмотрите, будет ли он запускаться теперь всегда: chkconfig --list sshd<ref>похоже, что для systemd (например, в ALTLinux [[p7]]) эта команда никакой информации не даст... Какая же будет аналогичная команда? -- Подскажите кто-нибудь!</ref> | * Посмотрите, будет ли он запускаться теперь всегда: {{cmd|chkconfig --list sshd}}<ref>похоже, что для {{prg|systemd}} (например, в ALTLinux [[p7]]) эта команда никакой информации не даст... Какая же будет аналогичная команда? -- Подскажите кто-нибудь!</ref> | ||
==Сессия удалённой работы/администрирования== | ==Сессия удалённой работы/администрирования== | ||
===я: иду=== | ===я: иду=== | ||
'''(обычный пользователь)''' | '''(обычный пользователь)''' | ||
* ssh 0 -l imz -p PORT_NAME -v | * {{cmd|ssh 0 -l imz -p PORT_NAME -v}} | ||
* su - или sudo su - (использую, соответственно, ваш пароль root-а или пароль пользователя imz, который вы установили -- их вы | * {{cmd|su -}} или {{cmd|sudo su -}} (использую, соответственно, ваш пароль root-а или пароль пользователя imz, который вы установили -- их вы мне должны сообщить) | ||
==Автоматический туннель== | ==Автоматический туннель== |
Версия от 18:23, 28 декабря 2013
Туннель
Конфигурация туннеля
вы и я: ваше имя
- Договоримся об имени для вашего компьютера (по которому я буду вести у себя учёт). Обозначим его NAME; дальше вместо NAME будем подставлять это выбранное ваше имя.
вы: ваш ключ, которому я позволю делать туннель у меня
(делает обычный пользователь, не root)
- ssh-keygen -f ~/.ssh/id_for_tunnel -C 'tunnel wanted by NAME'
- Сообщите мне его открытую (т.н. "публичную") часть: cat ~/.ssh/id_for_tunnel.pub
с моей стороны: пользователь и порт для туннеля
(делает администратор)
- useradd -m tun_NAME
- Позволяю входить по вашему ключу: cat >> ~tun_NAME/.ssh/authorized_keys
- TODO: Хорошо бы ещё запретить этому специальному пользователю (для обслуживания туннеля с моей стороны) запрещать выполнять любые команды из-под ssh, запускать командную оболочку, входить для иных целей, помимо туннеля.
- Выбираю у себя номер порта и сообщаю его вам. (Пусть он обозначается PORT_NAME.) Возможна конфигурация, когда порт выбирается автоматически (как в конфигурации ниже); тогда заранее договариваться о номере порта не надо.
вы: сохраняете конфигурацию
(делает тот же обычный пользователь, не root)
- Впишите в ~/.ssh/config конфигурацию (например, cat >> ~/.ssh/config -- дописывает в конец файла; потом Ctrl-D), о которой мы договорились:
Host imz_tunnel Hostname 79.165.57.121 Port 2202 User tun_NAME IdentityFile ~/.ssh/id_for_tunnel ForwardX11 no Compression yes CompressionLevel 9 RemoteForward 0 localhost:22
0 в качестве номера порта значит, что порт будет подобран автоматически (и напечатается ssh-клиентом -- см. команду ниже). В таком случае о номере порта можно заранее не договариваться.
(NAME нужно заменить на имя, выделенное для вас.)
Отредактировать ~/.ssh/config можно каким-нибудь текстовым редактором[1].
Запуск туннеля
вы: инициируете туннель (каждый раз, когда нужно)
(делает тот же обычный пользователь, не root)
- ssh imz_tunnel
(там будет написан номер выделенного порта у меня, если мы решили конфигурировать туннель с автоматическим выделением порта на моей стороне. Можете мне его сообщить -- будет обозначаться PORT_NAME.)
На самом деле, в нашем "правильнее" было бы дать команду с опцией:
- ssh -N imz_tunnel
-- опция -N указывает ssh-клиенту, чтобы он только перенаправлял порты (т.е. создавал "туннель"), но не давал вам командную оболочку другого компьютера (моего, к которому вы подключаетесь). Я мог бы как раз и запретить специальному пользователю, под которым с моей стороны обслуживается туннель, работать с командной оболочкой (потому что исполнять команды на моём компьютере -- не наша цель).
С вашей стороны: вход для меня
пользователь для меня и ключ
- useradd -G wheel -m imz (группа wheel нужна, если я должен быть администратором)
- Сообщайте мне пароль root, когда мне нужно администрировать, или добавьте меня в /etc/sudoers.[2]
- cat >> ~imz/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyUMWCDcoo3xlTilUObv06CKzCO+sj0fLHzIf9aBSa0jheHeknPP850S+65CU1Hds8gm4bLC1DWtDQ2ciIkEfDeKHBKpVpUKKbhs2b263Nw8ZEA1nR+C20lrvNM4XSft9DWpC3Z2pRsOYqs0e1rpUM0OotL15f/OUvhoeIP1fHpKrZPzWZ8tir5VTstL4d2jUZ1w0FJMwnPSK2uQ6hTMLXMfiBj5ZLLgXh+gd23x07i3X9I0AM3Jf6hMsrmpY6NrdhcSLQ12Zap3q7kO3tpR2Q10SobOEFRzKwjxwnrwVk29YWDaCm1L8m3bSbn1nmeMVok5Qquq/qRuTMzIuzsYLdw== imz@vaio
ssh-сервер у вас работает?
- service sshd status
- Если нет, включите: service sshd start
- Если не стоит этот пакет, поставьте: apt-get install openssh-server
- Включите навсегда: chkconfig sshd on
- Посмотрите, будет ли он запускаться теперь всегда: chkconfig --list sshd[3]
Сессия удалённой работы/администрирования
я: иду
(обычный пользователь)
- ssh 0 -l imz -p PORT_NAME -v
- su - или sudo su - (использую, соответственно, ваш пароль root-а или пароль пользователя imz, который вы установили -- их вы мне должны сообщить)
Автоматический туннель
Для большего удобства давайте позаботимся об автоматическом поддержании туннеля (средствами autossh и "обёрктой" вокруг него -- autosshd).
Преимущество команды autossh перед ssh в том, что такая команда будет перезапускать ssh с туннелем в случае всяких проблем. (Вам не нужно будет вручную заново давать эту команду.)
Преимущество же autosshd в том, что туннель будет запускаться сисмтемным сервисом, т.е. каждый раз при загрузке вашей системы, и вам не нужно будет об этом заботиться и давать самим команду. Это может также быть удобно, если я удалённо буду экспериментировать с перезагрузкой вашей системы. (Системный сервис, конечно, можно будет при желании отключить потом.)
Вот несколько всё более сложных усовершенствований:
вы: делайте autossh вместо ssh
(делает ваш обычный пользователь)
(Пакет autossh должен быть у вас установлен администратором, например, так: apt-get install autossh.)
Для запуска туннеля вместо
- ssh -N imz_tunnel
попробуйте:
- autossh -M 0 -N imz_tunnel
У autossh обязательна опция -M, которая даёт порт для мониторинга соединения, но документация /usr/share/doc/autossh-1.4c/README говорит, что современные ssh могут сами это делать (см. опции ServerAliveInterval
, ServerAliveInterval
). -M 0 как раз отключает этот мониторинг.
Примечания (о частных особенностях систем)
- ↑ Какой-нибудь текстовый редактор: например, medit в Simply Linux: medit ~/.ssh/config; или, например, emacs -- пакет с ним можно поставить, если он не стоит.
- ↑ На самом деле, например, в ALTLinux p7 пользователи из группы wheel и так уже могут пользоваться sudo. Но чтобы пользоваться sudo, нужно иметь свой пароль. Его можете установить вы: passwd imz; или дать это сделать мне, когда я войду и стану администратором через su -, узнав от вас ваш пароль root-а.
- ↑ похоже, что для systemd (например, в ALTLinux p7) эта команда никакой информации не даст... Какая же будет аналогичная команда? -- Подскажите кто-нибудь!