Должны ли сценарии оболочки быть исполняемыми?

Клиент отправляет свой идентификатор открытого ключа, и сервер проверяет, есть ли этот ключ в списке authorized_keys.

  • Клиент начинает с отправки идентификатора пары ключей, с помощью которой он хотел бы аутентифицироваться, на сервер.

  • Сервер проверяет авторизованный файл _ключей учетной записи, в которую клиент пытается войти для получения идентификатора ключа.

  • Если в файле найден открытый ключ с совпадающим идентификатором, сервер генерирует случайное число и использует открытый ключ для шифрования этого числа.

  • Сервер отправляет клиенту это зашифрованное сообщение. Если у клиента действительно есть связанный закрытый ключ, он сможет расшифровать сообщение с помощью этого ключа, раскрывая исходный номер.

https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process

0
27.08.2019, 20:19
2 ответа

Сценарий оболочки должен быть исполняемым только в том случае, если он должен запускаться как

./scriptname

Если это исполняемый файл и если он имеет действительную строку #!-, указывающую на правильный интерпретатор, то этот интерпретатор (, например.bash)будет использоваться для запуска скрипта.

Если скрипт не исполняемый (, но все еще доступен для чтения ), то его все равно можно запустить с помощью явного интерпретатора из командной строки, как, например, в

bash./scriptname

(если это скрипт bash).Обратите внимание, что вам нужно знать, какой интерпретатор использовать здесь, так как сценарий zshможет выполняться некорректно при запуске с bash, а сценарий bashтакже может сломаться при выполнении сsh(точно так же, как сценарий Perl. не будет работать правильно, если будет выполняться Python или Ruby ).

Некоторые скрипты, такие как тот, который вы показываете, на самом деле не скрипты , а "точечные -скрипты". Они предназначены для источников , например

../scriptname

т.е. используется как аргумент утилиты dot(.)или (в bash),

source./scriptname

(они эквивалентны в bash, но утилита dot более портативна)

Это запустит команды в сценарии точка -в той же среде, что и вызывающая оболочка, что необходимо, например, для. установка переменных среды в текущей среде. (Сценарии, которые запускаются как обычно, запускаются в дочерней среде, копии родительской среды, и не могут устанавливать переменные среды или изменять текущий каталог своих родительских оболочек.)

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

Я могу сказать, что скрипт, содержимое которого вы показываете, является точечным -скриптом, так как он не имеет#!-строки (он не нужен )и поскольку он просто экспортирует кучу переменных.


Я полагаю, что термин "точечный -сценарий" я взял из руководства по ksh93оболочке. Я не могу найти для него более авторитетный источник, но звучит как хорошее слово для описания сценария, который должен быть получен с помощью команды ..

5
28.01.2020, 02:14

Сценарии оболочки требуют, чтобы был установлен бит разрешения x, чтобы их можно было выполнять напрямую, например

./myscript.sh 

Если вы создадите этот файл и не нажмете на него chmod +x, вы получите ошибку отказа в доступе, как и следовало ожидать.

Однако предположим, что в файле не установлен исполняемый бит. Вы по-прежнему сможете выполнить следующее, что в конечном итоге приведет к выполнению скрипта:

sh./myscript.sh 

или

 bash./myscript.sh 

(Вы можете попробовать это в своем терминале -на самом деле, вам нужны только права на чтение файла, чтобы иметь возможность его выполнить)

По сути, если вы предоставляете свой собственный переводчик, например. sh myscript.sh вместо того, чтобы просто решать ядром, что делать с файлом на основе shebang, вам не требуется, чтобы этот бит выполнения был установлен.

2
28.01.2020, 02:14

Теги

Похожие вопросы