Естественно, home_machine следует заменить на IP-адрес вашей машины в сети. Для проброса соединения используем порт 1234, так что он должен быть доступен и не заблокирован межсетевым экраном. Создав соединение в офисе, отправляйтесь домой и набирайте:
Вы подключитесь к вашей корпоративной машине и сможете работать . Единственная проблема, с которой вы можете столкнуться – таймаут SSH-соединения. Чтобы решить ее, отредактируйте файл /etc/ssh/sshd.conf и укажите в нем опции ‘KeepAlive yes’ и ‘ServerAliveInterval 60’, чтобы соединение не обрывалось автоматически.
после настроек в /etc/ssh/sshd.conf (и, кстати, исправления опечатки в тексте) и перезапуска сервиса. даю в офисе команду:
$ ssh -R 5122:localhost:2222 <IPшник>
ssh: connect to host <IPшник> port 22: Connection refused
что сразу бросается в глаза - почему порт остался дефолтный 22й, хотя я прямо указываю 2222
2й вопрос: почему надо прописывать localhost, а не, скажем, IP офисного GW ?
мне это нужно ровно в тех целях в каких указано в статье: проброс порта через офисный NAT (чтобы не пользоваться VPN) путём открытия и поддержки соединения с домашней машиной.
обычным способом я могу зайти на домашнюю машину с офиса (используя порт, который НАТ разрешает открывать для обмена):
тут, вероятно имеется в виду, что
1. из рабочей сети вы можете подключится к домашней машине по ssh
2. выполнив команду ssh -R 1234:localhost:22 home_machine вы подключаетесь к домашней машине и идете домой (надеясь, что соединение не слетит по таймауту)
3. дома, с машины, на которую вы подключились с работы, говорите ssh -p 1234 localhost и попадаете на рабочую машину
вы подключаетесь к домашней машине по стандартному порту для ssh (22), после установления соединения создается тоннель - sshd на домашней машине слушает порт 5122 и пробрасывает входящие соединения по этому порту на localhost, порт 2222 по проложенному tcp-соединению. localhost в данном контексте - машина-инициатор тоннеля, т.е та, которая в рабочей сети. разумеется, на ней должен работать sshd по порту 22
ошибка, которую вы получаете (connection refused), говорит о том, что ssh-клиент получил connection reset (RST) на пакет SYN. это может быть связано с тем, что:
* корпоративный fireweall режет исходящие по tcp/22
* ваш домашний провайдер режен входящие по tcp/22
* ваш домашний компьютер не слушает протокол ssh по tcp/22
иными словами: до организации тоннеля дело просто не доходит
* корпоративный fireweall режет исходящие по tcp/22
* ваш домашний компьютер не слушает протокол ssh по tcp/22
именно так.
есть другой порт, по которому разрешены исходящие и по которому я подключаюсь с работы на домашнюю машину (5122). можно еще один порт найти (для описанной вами схемы - пусть будет Port_alternate).
вопрос в том как можно указать ssh использовать вместо порта 22 порт Port_alternate ?
и есть ли вообще альтернативные способы решения (подключение из дома к рабочей машины за NAT по SSH без юзанья VPN) для описанной ситуации ?
Never stop thinking..................................................................
ssh -2 -N -f -L 5080:localhost:80 -p3022 root@200.200.200.200 - Тунель удаленного 80-го порта на 5080 локальный
-2 Указывает ssh использовать версию 2 протокола (не используйте этот параметр, если работаете со старыми SSH серверами).
-N Означает использование в не-командном режиме, только для туннелирования. Если этот параметр опущен, ssh запустит обычную сессию.
-f Указывает ssh запускаться в фоновом режиме.
-L Означает локальный туннель в стиле localport:remotehost:remoteport
-p Порт на удаленном сервере
root@200.200.200.200 Логин и айпишник сервака
Делаю на корпоративном шлюзе так: ssh -f -g -N -p 22 user@localhost -L 2222:someserver:22
Значит, что подключаясь из дома к этому шлюзу на порт 2222 я попадаю на ссш компьютера someserver. А как потом убить этот проброс ?
И еще:
1) как сделать так, чтобы компьютер (у которого внутренний адрес) при включении пытался прицепиться к серверу (внешний адрес, совершенно другая сеть в другом конце города) коммандой
ssh -f -N -g user@server -R 1234:localhost:22 (правильно комманду написал?)
чтоб потом можно было ssh -p 1234 server и попасть на комп с внутренним адресом. Если просто поставить в /etc/rc.local , то возможен вариант, когда внешний недоступен, и он не подключится, если поставить в крон - возможен вариант, когда он уже подключен, и пробует еще раз. Т.е. нужно сделать так: "если туннеля нет, то подключиться; ждать час;"
2) как сделать так, чтоб соединение не пропадало через некоторое время? Читал про KeepAlive, это на стороне сервера нужно в /etc/ssh/sshd_config вписать или на стороне клиента /etc/ssh/ssh_config ?
pelmen
1) напишите скрипт: while () + sleep - бесконечный цикл с задержкой секунд в 20 (в rc.local "nohup script &")
2) первый пункт решит и эту проблему - если что переконектится
Кстати, если кому нужно для putty:
putty -D 9999 -P 1566 -ssh root@200.200.200.200 - socks-прокси на 9999 порту, потом в настройках браузера выбрать прокси-сокс и ввести это...