Я настроил ssh и переадресацию портов маршрутизатора, чтобы я мог ssh подключиться к компьютеру в моей домашней сети, когда меня нет дома. В настоящее время в моем .ssh/config
файле есть две записи: одна, когда я нахожусь в домашней сети, и одна, когда я не:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
Это работает, но мне интересно, смогу ли я облегчить себе жизнь. Я надеялся, что есть способ перечислить несколько записей HostName, чтобы в случае неудачи первого из них он возвращался ко второму:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Так что сначала он попытается подключиться к узлу в моей локальной сети, а если его нет, он попытается подключиться с использованием моего динамического имени узла no-ip. Я попытался ввести два имени хоста, но запустить ssh mycomputer
только блоки, ничего не делая.
Я отключил аутентификацию по паролю в пользу ключей, поэтому случайное подключение к компьютеру в локальной сети, когда я не нахожусь в моей домашней сети, не должно рисковать тем, что мой пароль уйдет куда угодно.
Можно ли указать резервный HostNames, чтобы попытаться, если первый не работает?
.ssh/config
можно запускать сценарии для определенных свойств. Я знаю, что вы можете с ProxyCommand. Вы можете сделать что-то, как показано в этом Q & A от SF - serverfault.com/questions/401233/… .Ответы:
Это некрасиво, но я думаю, что вы могли бы сделать это, используя
exec
критерийMatch
состояния выхода из порта, например:Обратите внимание, что на самом деле это не может определить, находитесь ли вы в «своей» домашней сети - просто вы находитесь в частном сегменте локальной сети с тем же диапазоном адресов, в котором служба прослушивает один и тот же адрес / порт.
источник
-w 1
или,nc
казалось, ждать вечно. Что может быть проще, так это второй матч,Match exec "true"
так как если первый матч не удался, просто слепо попробуйте второй вариант.Match
что нетElse
)ssh xyz.com
мойMatch exec "true"
поймала , что и перенаправлены меня в мой домашний сервер с помощью моего удаленного хоста. Я постараюсь с вашим руководителем, но я думаю, что то же самое произойдет.Match exec... Match !exec
вызывает ssh'ing для других доменов, чтобы вызватьMatch !exec
и переписать имя хоста.~/.ssh/config
наплевать на отступы. Некоторые команды сбрасывают область действия, то есть каждая новая строка хоста говорит: «предыдущие строки были для предыдущего хоста, следующие строки для этого нового хоста». Оказывается,Match
имеет ту же мощность «сброса объема», что и хост. Для этого я заменил строку HostMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"
и определил все пользовательские значения для моей локальной сети. Затем я добавил соответствующую строку, за исключением,!exec
и добавил все значения, когда я не в сети. Теперь он работает нормально для всех хостов.Я использую как это.
У ssh_config нет ничего похожего на блок отступов. Если вы хотите ограничить предложение совпадения конкретным хостом, то вам следует описать полное условие.
Вы можете избежать долгого ожидания
nc
, установив его-G 1
(время ожидания соединения 1 с), и вы можете использовать следующее поведение, чтобы избежать многократного вызоваnc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
источник
Нет; если вы укажете несколько
HostName
s для однойHost
записи, будет подтверждено только первое:источник
ssh mycomputer
это, должно быть довольно однозначно, к какому компьютеру я подключаюсь.