Хорошо, после некоторых исследований я заставил его работать. Позвольте мне объяснить ясно, так что это не проблема для кого-то в будущем с очень распространенным сценарием, как у меня. На приведенном выше рисунке рассмотрим:
Чтобы получить доступ к рабочему столу хоста _C с хоста _A на Mac, выполните следующие действия:
На хосте _Откройте терминал и выполните команду :ssh -t -L 5901:localhost:5901 user@host_B.net
; после ввода пароля вы окажетесь на хосте _B
Теперь откройте другой терминал и выполните:ssh user@host_B.net
; введите пароль и затем выполните:ssh user@host_C
; введите этот пароль, и вы окажетесь на хосте _C. Теперь запустите команду на хосте _C:ssh -t -R 5901:localhost:5901 user@host_B.net
. Вот и все.
Теперь на Mac откройте Finder, выберите меню go
и нажмите connect to server
. Введите vnc://127.0.0.1:5901
, введите пароль по запросу, и вы получите рабочий стол.
Один из способов сделать это — сначала сопоставить строку AllowGroups, а затем, если эта строка не содержит «my _unix _admins», выполнить замену конца -из -строки, которую вы уже было:
sed '/^AllowGroups/ { /my_unix_admins/ !s/$/ my_unix_admins/; }' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new
Это использует фигурные скобки для группировки поиска «мои _unix _admins» внутри совпадения AllowGroups. Другой важной особенностью здесь является!
инверсия , которая выполняет функцию замены s// только в строках, которые не соответствуют предыдущему диапазону (здесь, /my _unix _admins/ поиск по шаблону ).
Я сделал ссылку на онлайн-руководство GNU sed, предполагая, что вы используете GNU sed, но фигурные скобки и функция инверсии указаны в POSIX , так что вы также можете проконсультироваться с местным специалистом. страница. Единственной не -функцией POSIX вашей исходной команды была опция -i
, которую поддерживает GNU sed.
Единственный крайний случай, который я могу себе представить, это если бы у вас была группа с именем «астрономия _unix _admins» или «мои _unix _admins _на _марсе» в строка AllowGroups; тогда простое совпадение шаблона /my _unix _admins/ будет ложным совпадением. Чтобы избежать возможных ложных совпадений,вы можете использовать GNU sed и включить расширенные регулярные выражения (для чередования |
)с опцией -E
и использовать:
sed -E '/^AllowGroups/ { / my_unix_admins( |$)/ !s/$/ my_unix_admins/; }' < /etc/ssh/sshd_config > /etc/ssh/sshd_config.new
Два изменения::