1

Мне нужно ssh на разных машинах как с работы, так и из дома. На работе я могу легко использовать определения хоста ~/.ssh/config и просто сделать:

ssh servername_shortcut

Когда я дома, мне нужно туннелировать через сервер шлюза, что является многоэтапным и утомительным процессом

ssh -N -f -C -L 2024:servername:22 username@gateway.hostname.org
ssh -p 2024 username@localhost

(это особенно раздражает, потому что я должен вручную убить туннель при отключении)

Точно так же мне часто нужно rsync вещи, что требует:

rsync -e 'ssh -p 2024' username@localhost:... 

вместо

rsync username@servername_shortcut

Поскольку я часто переключаюсь между этими ситуациями, мне бы очень хотелось иметь возможность использовать короткую версию все время. Есть ли механизм для достижения этого?

РЕДАКТИРОВАТЬ: В частности, используя ~/.ssh/config , есть ли способ указать имя хоста, которое будет использовать host.domain.org когда это разрешено, и localhost:$portnumber когда туннель открыт? В псевдокоде я прошу об этом:

host myhost
user aginsbur
if tunnel:
    HostName localhost
    port 2022
else:
    HostName myhost.domain.org

1 ответ1

0

Я знаю, что @Jonno уже включил это в комментарии, но это отличное предложение, и именно это я и сделаю, поэтому я решил поместить это здесь: просто поместите команды в сценарии bash. Например:

echo 'ssh -N -f -C -L 2024:servername:22 username@gateway.hostname.org' > ssh_gateway_hostname.sh

Это поместит команду в файл .sh , а затем вы можете запустить ее несколькими способами:

bash ssh_gateway_hostname.sh

или же

source ssh_gateway_hostname.sh

Хотя между ними есть небольшая разница, маловероятно, что это повлияет на вас, если вы не будете делать какие-то необычные вещи в своей среде.

Прекрасная вещь в rsync состоит в том, что после первоначального rsync файла или каталога его последующее использование только обновляет изменения. Это означает, что вы можете просто указать каталог, который вы хотите синхронизировать, и поместить его в сценарий .sh :

echo 'rsync -e 'ssh -p 2024' username@localhost:...' > rsync_username_at_localhost.sh

Тогда, когда вы запустите его, он будет только перемещать новые вещи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .