История изменений
Исправление DRVTiny, (текущая версия) :
1) Команды, передаваемые ssh'у, лучше засунуть в «подвал» скрипта (после exit), обособить сверху и снизу строками (я делаю что-то вроде
== include.this.shit ->
== <- include.this.shit
2) Если внутри двойных кавычек ничего не expand'иться, то и не нужно их использовать - для этих случаев есть одинарные кавычки
3) Для конструкции [ test ] в BASH есть своя реализация с гораздо более широкими возможностями: [[ test ]]
4) Очень много хардкода: одно и то же название каталога в куче разных мест, все пути прибиты гвоздями. При этом весь этот хардкод вообще хорошо бы принимать параметрами скрипта: getopts вам в руки
5) А что если выбранный вами port на самом деле уже кем-то занят? Можно конечно смотреть по fail'у ssh, но тогда сам fail разбирать нужно. Не легче ли проверять записью в /dev/tcp/host/port? Ну или lsof/netstat
6) Насчёт логирования здесь правильно заметили: у вас мало того, что тупо echo, так ещё и не в STDERR
C .lock логика мутная немного... Уж если что-то подобное нужно сделать - сохраняйте туда хотя бы pid процесса ssh -L
Кстати, а что оно делает?
ssh $core \
-Nf \
-L $port:localhost:$port \
-R $port:localhost:22 \
-o ExitOnForwardFailure=yes
-R перенаправит через другой (?) туннель весь трафик на машине $core, который шёл на tcp-порт $port, на вашу локальную машину (где запускается скрипт), порт 22. В итоге по идее если сделать коннект на локальную машину, порт $port, то этот коннект уйдёт на $core и через другой туннель вернётся снова на локальную машину, на sshd-сервер.
Ничего не понимаю, это зачем так?
Исправление DRVTiny, :
1) Команды, передаваемые ssh'у, лучше засунуть в «подвал» скрипта (после exit), обособить сверху и снизу строками (я делаю что-то вроде
== include.this.shit ->
== <- include.this.shit
2) Если внутри двойных кавычек ничего не expand'иться, то и не нужно их использовать - для этих случаев есть одинарные кавычки
3) Для конструкции [ test ] в BASH есть своя реализация с гораздо более широкими возможностями: [[ test ]]
4) Очень много хардкода: одно и то же название каталога в куче разных мест, все пути прибиты гвоздями. При этом весь этот хардкод вообще хорошо бы принимать параметрами скрипта: getopts вам в руки
5) А что если выбранный вами port на самом деле уже кем-то занят? Можно конечно смотреть по fail'у ssh, но тогда сам fail разбирать нужно. Не легче ли проверять записью в /dev/tcp/host/port? Ну или lsof/netstat
6) Насчёт логирования здесь правильно заметили: у вас мало того, что тупо echo, так ещё и не в STDERR
C .lock логика мутная немного... Уж если что-то подобное нужно сделать - сохраняйте туда хотя бы pid процесса ssh -L
Кстати, а что оно делает?
ssh $core \
-Nf \
-L $port:localhost:$port \
-R $port:localhost:22 \
-o ExitOnForwardFailure=yes
-R перенаправит через другой (?) туннель весь трафик на машине $core, который шёл на tcp-порт $port, на вашу локальную машину (где запускается скрипт), порт 22. В итоге по идее если сделать коннект на локальную машину, порт $port, то этот коннект уйдёт на $core и через другой туннель вернётся снова на локальную машину, на sshd-сервер.
Ничего не понимаю, это зачем так?
Исходная версия DRVTiny, :
1) Команды, передаваемые ssh'у, лучше засунуть в «подвал» скрипта (после exit), обособить сверху и снизу строками (я делаю что-то вроде == include.this.shit -> первой строкой и == <- include.this.shit последней). Экранирование там крайне несимпатично.
2) Если внутри двойных кавычек ничего не expand'иться, то и не нужно их использовать - для этих случаев есть одинарные кавычки
3) Для конструкции [ test ] в BASH есть своя реализация с гораздо более широкими возможностями: [[ test ]]
4) Очень много хардкода: одно и то же название каталога в куче разных мест, все пути прибиты гвоздями. При этом весь этот хардкод вообще хорошо бы принимать параметрами скрипта: getopts вам в руки
5) А что если выбранный вами port на самом деле уже кем-то занят? Можно конечно смотреть по fail'у ssh, но тогда сам fail разбирать нужно. Не легче ли проверять записью в /dev/tcp/host/port? Ну или lsof/netstat
6) Насчёт логирования здесь правильно заметили: у вас мало того, что тупо echo, так ещё и не в STDERR
C .lock логика мутная немного... Уж если что-то подобное нужно сделать - сохраняйте туда хотя бы pid процесса ssh -L
Кстати, а что оно делает?
ssh $core \
-Nf \
-L $port:localhost:$port \
-R $port:localhost:22 \
-o ExitOnForwardFailure=yes
-R перенаправит через другой (?) туннель весь трафик на машине $core, который шёл на tcp-порт $port, на вашу локальную машину (где запускается скрипт), порт 22. В итоге по идее если сделать коннект на локальную машину, порт $port, то этот коннект уйдёт на $core и через другой туннель вернётся снова на локальную машину, на sshd-сервер.
Ничего не понимаю, это зачем так?