Упомянутое здесь решение хорошее, но я искал такое, которое не требовало бы наличия ~/.ssh или попытки его создания (, работающего в Windows, распространяющего встроенный MSYS ssh.exe, но работает на других машинах без MSYS/Cygwin ).
К сожалению, кажется, что подпрограмма жестко запрограммирована в исходном коде, независимо от того, какое значение вы присвоитеUserKnownHostsFile
:
r = snprintf(buf, sizeof buf, "%s%s%s", pw->pw_dir,
strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR);
if (r > 0 && (size_t)r < sizeof(buf) && stat(buf, &st) < 0) {
#ifdef WITH_SELINUX
ssh_selinux_setfscreatecon(buf);
#endif
if (mkdir(buf, 0700) < 0)
error("Could not create directory '%.200s'.",
buf);
#ifdef WITH_SELINUX
ssh_selinux_setfscreatecon(NULL);
#endif
}
Однако интересно отметить, что он пытается расширить переменную окружения $HOME
, чтобы определить домашний каталог. Поскольку размер буфера составляет около 256 байт, мы можем фактически обойти условие if, переполнив буфер (, определяющий HOME, строкой длиннее 256 байт ), например.:
export HOME=$HOME/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
Если вы печатаете прямо в оболочке, вы можете
echo "I should have studied"
Чтобы создать сценарий, все, что вам нужно сделать, это поместить команды, которые вы хотите запустить, в (текстовый )файл и использовать этот файл:
Используя предпочитаемый вами редактор UNIX/Linux, создайте файл study
. Вы можете использовать любое имя, которое вам нравится (, включая имя с суффиксом .sh
, если вы предпочитаете ). Добавьте к нему эти две строки
#!/bin/bash
echo "I should have studied"
Первая строка объявляет, что это bash
сценарий оболочки. Вам не нужно фильтровать вывод с помощью grep
, так как команда echo
делает достаточно сама по себе. (Также обратите внимание, что вы не вводите начальный $
; некоторые люди используют это на StackExchange и других сайтах, чтобы показать, что они вводят команду, но лично я думаю, что это сбивает с толку. )Теперь сделайте файл исполняемым, чтобы он мог работать как любая другая программа в системе.
chmod +x study
И запустить его
./study
Ведущий ./
указывает оболочке искать команду в текущем каталоге. Если бы сценарий находился в системном каталоге или в пути поиска ($PATH
), вы могли бы просто ввести его имя, study
, чтобы запустить его -, как и любую другую команду.
Для проверки синтаксисане бойтесь использоватьhttps://shellcheck.net/по мере разработки ваших сценариев.