LINUX.ORG.RU
решено ФорумAdmin

Нужна помощь по ssh

 


0

3

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

Вопрос: можно ли со второго зайти на первый по ssh, и если да, то как?

В сетях практически ничего не смыслю: так, общие представления.

Нужна третья машина с белым IP. На этой машине можно либо настроить VPN-сервер (сложный путь), либо настроить SSH-сервер (более простой путь). С VPN все понятно. По SSH с первого компа подключаешься к третьему и пробрасываешь порт первого компа на третий (получиться что на третьем открыт порт, который на самом деле открыт на первом). Со второго можно подключаться к порту третьего. Это все способы с проксированием. В качестве третьего компа с SSH можно использовать сервисы с бесплантыми шелл аккаунтами, http://shellmix.com/ например.
Еще можно все это провернуть с помощью IPv6. Наверняка у тебя нет реальных IPv6, но есть сервисы, которые предоставляют услугу IPv6 через IPv4 (например http://www.gogo6.com/). Еще можно использовать все тот же OpenVPN, но уже без третьего компа. Как настроить не помню, но где-то на хабре было. Смысл в том что два компа за натом одновременно подключаются друг к другу. У каждого компа один порт на вход, другой на выход. Это способы прямого соединения.

Black_Roland ★★★★
()
Ответ на: комментарий от Black_Roland

Ага, спасибо. Более-менее понятно теперь в какую сторону копать.

HerrWeigel ★★★★
() автор топика

1. Поднять VPN, например hamachi (не нужен отдельный компьютер с белым ip) или openvpn (нужен компьютер-сервер с белым ip). Или что-нибудь из этого http://habrahabr.ru/post/150151/

2. Использовать IPv6. Например, miredo (teredo-клиент). Пробивает любой NAT, дают белый IPv6-адрес (а серых и нет). Но для соединения нужен IPv6, что не особо проблемно, в windows есть teredo, в линуксе — miredo.

3. Использовать сервисы проброса, типа http://pagekite.net/. Они платные в основном.

OpenVPN можно использовать без белых адресов, но достаточно геморройно.

ValdikSS ★★★★★
()
Ответ на: комментарий от Black_Roland

Ну вот смотри: я получил аккаунт на shellmix.com. Теперь встал вопрос: как организовать проброс порта? Гугление дает какие-то чересчур заумные результаты, а man ssh пока не особо осиливается.

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от Black_Roland

И еще: у меня на домашнем роутере включен нат. Я так понимаю, что нужно пробросить порт еще на нем. Как это сделать (DIR-300NRU)?

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от HerrWeigel

Так, по ходу мне нужна опция -R. Только я не очень врубаю, как ее использовать. Я выполняю на первом компе

ssh username@shellmix.com -R 22:localhost:22
Пишет, что
Warning: remote port forwarding failed for listen port 22
ЧЯДНТ? Плохо читаю ман? Или это из-за того, что на роутере порт не проброшен еще?

HerrWeigel ★★★★
() автор топика
Последнее исправление: HerrWeigel (всего исправлений: 1)
Ответ на: комментарий от AITap

Кстати, попробовал установить miredo, но что-то он не шибко запахал: адрес как был fe80::224:21ff:fef1:5253, так и остался.

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от HerrWeigel

Warning: remote port forwarding failed for listen port 22

Ты пробрасываешь 22 порт своего компа как 22 порт на shellmix.com. 22 порт просто уже занят, используй какой-нибудь 2671 порт (и то он может быть занят, народу много).

ssh -f -N -R 2671:localhost:22 username@shellmix.com
На роутере ничего делать не нужно, т.к. это исходящее соединение, а не входящее.
Проброс работает так: например у тебя на одном компе открыт 22 порт. С того же компа по SSH ты подключаешься ко второму компу и создаешь туннель. На втором компе открывается определенный порт (2671 например). Все соединения к 2671 порту на втором компе заворачиваются в туннель и перенаправляются на первый комп на 22 порт. Получается что на втором компе открыт «виртуальный» порт, который на самом деле открыт на первом компе.
В твоем случае, к первому компу напрямую не достучаться, а ко второму можно, т.к. у него белый IP. Ты создаешь на втором компе виртуальный порт, который перенаправляется на первый комп (первый порт как клиент).

Black_Roland ★★★★
()
Ответ на: комментарий от Black_Roland

Да, 22 порт на shellmix занят, а не у тебя. У shellmix 22 используется как раз для твоих же соединений. Самим шеллмиксом заняты 22, 53, 80 и другие. Пользователи шеллмикса еще свои порты там открывают (у кого-то ZNC, у кого-то такие же туннели). Можешь прописать -R несколько раз в одной строке с разными портами, на случай если 2671 будет занят.

Black_Roland ★★★★
()
Ответ на: комментарий от Black_Roland

Ты пробрасываешь 22 порт своего компа как 22 порт на shellmix.com. 22 порт просто уже занят

Вот это провал.

Спасибо за подробные разъяснения. Правда, искать свободный порт надоело, да и к тому же на шеллмиксе сейчас какие-то проблемы, с железом, не достучаться до них. Поэтому настроил ipv6.

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от HerrWeigel

Настройка соединения по ssh между двумя машинами за NAT (от чайника чайнику)

  • Для обоих компьютеров получите ipv6-адрес любым из описанных здесь способов. Обратите внимание, что при использовании некоторых из них ваш ipv6-адрес может периодически меняться.
  • Установите openssh-server на компьютере, к которому нужно будет подключаться.
  • Узнайте его ipv6-адрес с помощью команды
    ip addr show dev teredo | grep 'scope global'
  • Занесите этот ip под любым удобным именем в /etc/hosts на компьютере, с которого будет производиться подключение. Например:
    2001:0:34af:32r:43e6:97f:4682:v6my server
  • Теперь можно подключаться с помощью команды
    ssh -6 username@server
HerrWeigel ★★★★
() автор топика
Последнее исправление: HerrWeigel (всего исправлений: 1)

Занесите этот ip под любым удобным именем в /etc/hosts на компьютере, с которого будет производиться подключение. Например:

А вот так делать НЕ надо. Лучше занеси параметры подключения в ~/.ssh/config (man ssh_config)

PS:

  1. используй НЕ 22й порт. Можно например выполнить команду
    $ echo $RANDOM
    что-бы узнать нужный порт. На сервере порт прописывается в /etc/ssh/sshd_config, на клиенте ~/.ssh/config (man sshd_config & man ssh_config)

    В файле ~/.ssh/config кроме порта можно прописать и другие нужные вещи (ключевой файл, компрессию, IP адрес, и т.д.)

  2. используй авторизацию по ключу. На клиенте нужно выполнить
    $ ssh-keygen -f key
    создастся два файла:
    • ~/.ssh/key.pub(на клиенте) это публичная часть ключа, её надо добавить НА СЕРВЕР, в его файл ~/.ssh/authorized_keys (для того пользователя, под которым ты входишь. Если файла нет, его надо создать.
    • ~/.ssh/key это секретная часть ключа, она НИКОГДА НЕ ДОЛЖНА ПОКИДАТЬ ЭТОТ КОМПЬЮТЕР.
  3. проверь права каталогов ~/.ssh/ и на клиенте и на сервере, они должны быть 0700, владелец - юзер. Права файлов в этих каталогах 0600
  4. проверив возможность входа по ключу (пароль не должен быть запрошен), ОТКЛЮЧИ вход по паролю.

    /etc/ssh/sshd_config

    PubkeyAuthentication yes
    PasswordAuthentication no
    
    (требуется перезагрузка демона sshd)

  5. Запрети вход пользователю root
    PermitRootLogin no
    что-бы выполнять команды от имени рута используй su, а лучше грамотно настроенное sudo.

Note: если нет root доступа, то нужно выполнить пункты №2 и №3. Желательно попросить администратора выполнить остальные пункты.

drBatty ★★
()
Ответ на: комментарий от drBatty

Спасибо за подсказки, все получилось. В манах еще покопаюсь.

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от slackwarrior

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

Вряд ли публичные вай-фай точки дают белый IP.

Black_Roland ★★★★
()
Ответ на: комментарий от slackwarrior

Ну, я сначала и хотел сделать туннель, но белого ip у меня нигде нет, а искать свободный порт на shellmix надоело через 15-20 попыток.

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от Black_Roland

Ну, смысл в том, что без IP6 все равно можно обойтись :)

slackwarrior ★★★★★
()
Ответ на: комментарий от HerrWeigel

О_о не может быть чтобы на шеллмиксе столько портов было занято. Еще у них tunnel.shellmix.com есть, может они только там возможность туннели создавать оставили. Хотя это не важно, IPv6 более прямой способ, чем через третий сервер.

Black_Roland ★★★★
()
Ответ на: комментарий от Black_Roland

Хотя это не важно, IPv6 более прямой способ, чем через третий сервер.

Вот я тоже так подумал :)

HerrWeigel ★★★★
() автор топика
Ответ на: комментарий от Black_Roland

О_о не может быть чтобы на шеллмиксе столько портов было занято. Еще у них tunnel.shellmix.com есть, может они только там возможность туннели создавать оставили. Хотя это не важно, IPv6 более прямой способ, чем через третий сервер.

Сегодня проверил - действительно там можно, а на shellmix.com нельзя.

HerrWeigel ★★★★
() автор топика
Последнее исправление: HerrWeigel (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.