Туннель с помощью SSH
Mar. 28th, 2007 01:08 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
С помощью SSH можно реализовать туннель, например, для подключения к машине, недоступной из интернета, когда с нее самой можно подключиться к какому-либо серверу по протоколу SSH. Это бывает полезным, например, когда машина, к которой нужно организовать подключение, находится в сети, использующей NAT.
Чтобы организовать такой канал связи, который будет использовать при этом шифрование передаваемых данных, достаточно иметь удаленную машину с запущенным на ней сервером SSH и набрать следующую команду в командной строке (если используется POSIX-совместимая операционная система):
ssh -R $TUNNEL_PORT:$LOCAL_HOST:$LOCAL_PORT $REMOTE_HOST -u $REMOTE_LOGIN -p $REMOTE_PORT -N
Здесь:
``-N'' означает, что не нужно запускать какие-либо команды на удаленной машине;
``-p $REMOTE_PORT'' указывает на какой порт нужно подключаться к удаленному серверу SSH;
``-u $REMOTE_LOGIN'' устанавливает имя пользователя на удаленной машине;
``$REMOTE_HOST'' определяет адрес удаленной машины;
``-R $TUNNEL_PORT:$LOCAL_HOST:$LOCAL_PORT'' несет в себе информацию о том, между какими портами будет установлено соединение.
Подразумевается, что переменная $TUNNEL_PORT содержит номер порта на удаленной машине, подключения к которому будут перенаправляться на адрес $LOCAL_HOST:$LOCAL_PORT. Например, если нужно организовать подключения к SSH на локальной машине, к которому нет доступа из интернет, можно набрать примерно следующую команду:
ssh -R 12345:localhost:22 myhost.dyndns.org -u mylogin -p 2222 -N
После этого, работая на машине myhost.dyndns.org, можно будет подключаться на ее порт 12345:
ssh localhost -u myremotelogin -p 12345
Кроме того, будет возможность открытия нескольких соединений.
ssh -R $TUNNEL_PORT:$LOCAL_HOST:$LOCAL_PORT $REMOTE_HOST -u $REMOTE_LOGIN -p $REMOTE_PORT -N
Здесь:
``-N'' означает, что не нужно запускать какие-либо команды на удаленной машине;
``-p $REMOTE_PORT'' указывает на какой порт нужно подключаться к удаленному серверу SSH;
``-u $REMOTE_LOGIN'' устанавливает имя пользователя на удаленной машине;
``$REMOTE_HOST'' определяет адрес удаленной машины;
``-R $TUNNEL_PORT:$LOCAL_HOST:$LOCAL_PORT'' несет в себе информацию о том, между какими портами будет установлено соединение.
Подразумевается, что переменная $TUNNEL_PORT содержит номер порта на удаленной машине, подключения к которому будут перенаправляться на адрес $LOCAL_HOST:$LOCAL_PORT. Например, если нужно организовать подключения к SSH на локальной машине, к которому нет доступа из интернет, можно набрать примерно следующую команду:
ssh -R 12345:localhost:22 myhost.dyndns.org -u mylogin -p 2222 -N
После этого, работая на машине myhost.dyndns.org, можно будет подключаться на ее порт 12345:
ssh localhost -u myremotelogin -p 12345
Кроме того, будет возможность открытия нескольких соединений.