LINUX.ORG.RU
ФорумAdmin

~/.ssh/config подключение к одному хосту из разных мест.

 


0

1

Дано:

  • Ноутбук, с которым я бываю на работе и «где-то ещё»;
  • Рабочий сервер, «белого» IP нет;
  • ssh-туннель через мой домашний компьютер.

Требуется:

Настроить config, чтобы подключаться к одному хосту в зависимости от расположения. Не исключаю, что это невозможно. Но вдруг. :^)

Чуть подробнее с примерами:

Host work
	HostName my.home.net
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	Port 20000
	IdentitiesOnly yes

Host work_local
	HostName 192.168.1.200
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	IdentitiesOnly yes

Если я на работе, я подключаюсь так:

$ ssh work_local

Если я «где-то ещё»:

$ ssh work

Хочется, чтобы я мог в обоих случаях делать:

$ ssh work

Но если я на работе, то подключение по локальной сети (ssh user@192.168.1.200), а если «где-то ещё», то подключение через домашний компьютер (ssh -p20000 user@my.home.net).

Ничего не понятно, но очень интересно.

ssh -p20000 user@my.home.net

А это что? Ты пробрасываешь со своего внешнего IP 20000 порт всему интернету на 22 порт машины во внутренней корпоративной сети?

А-та-та за такое.

Тебе нужно всего-навсего иметь доступ к сети, с которой напрямую доступен IP машины к которой будешь подключаться.

Т.е. VPN подключение либо к корпоративной сети, либо к твоей домашней сети.

ssh-туннель через мой домашний компьютер.

Как с твоего домашнего ПК осуществляется подключение к рабочему ПК?

kostik87 ★★★★★
()

Написать скрипт, который проверяет в какой сети ты находишься (или какой ip имеешь) и запускать либо ssh.work, либо ssh.work_local. Ну это самое простое, чтобы ничего, практически, не менять.

А так, наверное, комментатор выше правильно говорит, ты делаешь что-то не правильно.

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

машины во внутренней корпоративной сети?

А-та-та за такое.

Согласен, но в данном конкретном случае сервер изолирован от всей остальной корпоративной сети. Мой персональный островок на работе. :^)

Как с твоего домашнего ПК осуществляется подключение к рабочему ПК?

Через туннель. ssh user@my.home.net -p20000

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

Написать скрипт, который проверяет в какой сети ты находишься (или какой ip имеешь) и запускать либо ssh.work, либо ssh.work_local. Ну это самое простое, чтобы ничего, практически, не менять

В принципе да, а через config никак?

Jullyfish
() автор топика

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

user_undefined ★★
()

Можно использовать Match и скрипт, который определит сеть.

(При экспериментах надо учитывать, что в ssh_config приоритет у первой установки занчения параметра)

Будет что-то такое:

Match host work exec "/home/user/bin/is_not_work_network.sh"
	HostName my.home.net
	Port 20000

Host work
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	IdentitiesOnly yes
Belkrr ★★
()
Ответ на: комментарий от VIT

Не совсем понял зачем ProxyJump в моём случае, но получилось, спасибо! Выглядит это так (тут скорее всего это можно аккуратнее оформить):

Match host work exec "ssh -q -i ~/.ssh/work user@192.168.1.200 -o PubkeyAuthentication=yes -o IdentitiesOnly=yes exit"
	HostName 192.168.1.200
	Port 22

Host work
	HostName my.home.net
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	Port 20000
	IdentitiesOnly yes

Удивительно как ssh продолжает удовлетворять мои больные фантазии.

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

Вот так аккуратнее:

Match host work exec "! ssh -q test_work exit"
	HostName my.home.net
	Port 20000

Host work test_work
	HostName 192.168.1.200
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	IdentitiesOnly yes

И scp completion работает. :^)

Jullyfish
() автор топика