Из fprintd страницы справочника:
fprintd-enroll [username]
и
-f finger
For fprintd-enroll, the finger to enroll
Похоже на размещение "лево-указательного пальца" как имени пользователя. и пользовательский лево-указательный палец Не Авторизовывается
Если у Вас есть удар 2.04 или выше с /dev/tcp
псевдоустройство включило, можно загрузить файл с самого удара.
Вставьте следующий код непосредственно в оболочку удара (Вы не должны сохранять код в файл для выполнения):
function __wget() {
: ${DEBUG:=0}
local URL=$1
local tag="Connection: close"
local mark=0
if [ -z "${URL}" ]; then
printf "Usage: %s \"URL\" [e.g.: %s http://www.google.com/]" \
"${FUNCNAME[0]}" "${FUNCNAME[0]}"
return 1;
fi
read proto server path <<<$(echo ${URL//// })
DOC=/${path// //}
HOST=${server//:*}
PORT=${server//*:}
[[ x"${HOST}" == x"${PORT}" ]] && PORT=80
[[ $DEBUG -eq 1 ]] && echo "HOST=$HOST"
[[ $DEBUG -eq 1 ]] && echo "PORT=$PORT"
[[ $DEBUG -eq 1 ]] && echo "DOC =$DOC"
exec 3<>/dev/tcp/${HOST}/$PORT
echo -en "GET ${DOC} HTTP/1.1\r\nHost: ${HOST}\r\n${tag}\r\n\r\n" >&3
while read line; do
[[ $mark -eq 1 ]] && echo $line
if [[ "${line}" =~ "${tag}" ]]; then
mark=1
fi
done <&3
exec 3>&-
}
Затем можно выполнить его как от оболочки следующим образом:
__wget http://example.iana.org/
Источник: ответ Moreaki обновляющие и устанавливающие пакеты через cygwin командную строку?
Обновление: как упомянуто в комментарии, подход, обрисованный в общих чертах выше, упрощен:
read
будут обратные косые черты мусора и ведущий пробел.$line
будет шарик.Используйте рысь.
Это довольно характерно для большей части Unix/Linux.
lynx -dump http://www.google.com
- дамп: выведите первый файл к stdout и выходу
man lynx
Или netcat:
/usr/bin/printf 'GET / \n' | nc www.google.com 80
Или telnet:
(echo 'GET /'; echo ""; sleep 1; ) | telnet www.google.com 80
Если у Вас есть этот пакет libwww-perl
Можно просто использовать:
/usr/bin/GET
Вместо этого используйте загрузку через SSH с вашего локального компьютера.
«Минимальный * nix без заголовка» означает, что вы, вероятно, подключились к нему через SSH. Таким образом, вы также можете использовать SSH для загрузки в него . Что функционально эквивалентно загрузке (пакетов программного обеспечения и т. Д.) , за исключением , когда вы, конечно, хотите, чтобы команда загрузки включалась в сценарий на вашем автономном сервере.
Как показано в ответе , вы должны выполнить следующее на своем локальном компьютере, чтобы поместить файл на удаленный сервер без головы:
wget -O - http://example.com/file.zip | ssh user@host 'cat >/path/to/file.zip'
Более быстрая загрузка через SSH с третьего machine
Недостатком вышеупомянутого решения по сравнению с загрузкой является более низкая скорость передачи, поскольку соединение с вашим локальным компьютером обычно имеет гораздо меньшую пропускную способность, чем соединение между вашим автономным сервером и другими серверами.
Чтобы решить эту проблему, вы, конечно, можете выполнить указанную выше команду на другом сервере с приличной пропускной способностью. Чтобы сделать это более удобным (избегая ручного входа в систему на третьей машине), вот команда для выполнения на вашем локальном компьютере .
Для безопасности скопируйте и вставьте эту команду , включая начальный пробел ''
. Причину см. В объяснениях ниже.
ssh user@intermediate-host "sshpass -f <(printf '%s\n' yourpassword) \
ssh -T -e none \
-o StrictHostKeyChecking=no \
< <(wget -O - http://example.com/input-file.zip) \
user@target-host \
'cat >/path/to/output-file.zip' \
"
Пояснения:
Команда отправит ssh на ваш третий компьютер промежуточный хост
, начнет загрузку файла на него через wget
и начнет загрузку его на цель -host
через SSH.Загрузка и выгрузка используют полосу пропускания вашего промежуточного хоста
и происходят одновременно (из-за эквивалентов канала Bash), поэтому прогресс будет быстрым.
При использовании вам необходимо заменить два входа на сервер ( user @ * - host
), пароль целевого хоста ( yourpassword
), URL-адрес загрузки ( http://example.com/…
) и выходной путь на вашем целевом хосте ( /path/to/output-file.zip
) с соответствующими собственными значениями.
Чтобы узнать о параметрах -T -e none
SSH при его использовании для передачи файлов, см. эти подробные объяснения .
Эта команда предназначена для случаев, когда вы не можете использовать механизм аутентификации с открытым ключом SSH - это все еще происходит с некоторыми поставщиками общего хостинга, в частности, с Host Europe . Чтобы автоматизировать процесс, мы полагаемся на sshpass
, чтобы иметь возможность указать пароль в команде. Для этого требуется, чтобы на промежуточном хосте был установлен sshpass
( sudo apt-get install sshpass
в Ubuntu).
Мы пытаемся использовать sshpass
безопасным способом, но он все равно не будет таким безопасным, как механизм открытого ключа SSH (говорит man sshpass
). В частности, мы предоставляем пароль SSH не как аргумент командной строки, а через файл, который заменяется подстановкой процесса bash, чтобы убедиться, что он никогда не существует на диске. printf
является встроенным в bash, поэтому эта часть кода не всплывает в виде отдельной команды в выводе ps
, так как при этом будет открыт источник пароля [ ].Я думаю , что использование sshpass
так же безопасно, как и вариант sshpass -d
, рекомендованный в man sshpass
, потому что bash в любом случае внутренне отображает его в такой файловый дескриптор / dev / fd / *
. И это без использования временного файла [ источник ]. Но никаких гарантий, может я что-то пропустил.
Опять же, чтобы сделать использование sshpass
безопасным, нам нужно предотвратить запись команды в историю bash на вашем локальном компьютере. Для этого перед всей командой ставится один пробел, который имеет такой эффект.
Часть -o StrictHostKeyChecking = no
предотвращает сбой команды в случае, если она никогда не подключалась к целевому хосту. (Обычно SSH затем ожидает ввода пользователя для подтверждения попытки подключения. Мы все равно заставляем его продолжить.)
sshpass
ожидает команды ssh
или scp
в качестве своей последний аргумент. Итак, мы должны переписать типичный wget -O -… | ssh…
в форму без канала bash, как описано здесь .
На основе рецепта @Chris Snow. Я сделал несколько улучшений:
Вот код:
function __wget() {
: ${DEBUG:=0}
local URL=$1
local tag="Connection: close"
if [ -z "${URL}" ]; then
printf "Usage: %s \"URL\" [e.g.: %s http://www.google.com/]" \
"${FUNCNAME[0]}" "${FUNCNAME[0]}"
return 1;
fi
read proto server path <<<$(echo ${URL//// })
local SCHEME=${proto//:*}
local PATH=/${path// //}
local HOST=${server//:*}
local PORT=${server//*:}
if [[ "$SCHEME" != "http" ]]; then
printf "sorry, %s only support http\n" "${FUNCNAME[0]}"
return 1
fi
[[ x"${HOST}" == x"${PORT}" ]] && PORT=80
[[ $DEBUG -eq 1 ]] && echo "SCHEME=$SCHEME" >&2
[[ $DEBUG -eq 1 ]] && echo "HOST=$HOST" >&2
[[ $DEBUG -eq 1 ]] && echo "PORT=$PORT" >&2
[[ $DEBUG -eq 1 ]] && echo "PATH=$PATH" >&2
exec 3<>/dev/tcp/${HOST}/$PORT
if [ $? -ne 0 ]; then
return $?
fi
echo -en "GET ${PATH} HTTP/1.1\r\nHost: ${HOST}\r\n${tag}\r\n\r\n" >&3
if [ $? -ne 0 ]; then
return $?
fi
# 0: at begin, before reading http response
# 1: reading header
# 2: reading body
local state=0
local num=0
local code=0
while read line; do
num=$(($num + 1))
# check http code
if [ $state -eq 0 ]; then
if [ $num -eq 1 ]; then
if [[ $line =~ ^HTTP/1\.[01][[:space:]]([0-9]{3}).*$ ]]; then
code="${BASH_REMATCH[1]}"
if [[ "$code" != "200" ]]; then
printf "failed to wget '%s', code is not 200 (%s)\n" "$URL" "$code"
exec 3>&-
return 1
fi
state=1
else
printf "invalid http response from '%s'" "$URL"
exec 3>&-
return 1
fi
fi
elif [ $state -eq 1 ]; then
if [[ "$line" == $'\r' ]]; then
# found "\r\n"
state=2
fi
elif [ $state -eq 2 ]; then
# redirect body to stdout
# TODO: any way to pipe data directly to stdout?
echo "$line"
fi
done <&3
exec 3>&-
}
while read
как этот обратные косые черты мусора и ведущий пробел и Bash не могут иметь дело с байтами NUL очень приятно, таким образом, двоичные файлы отсутствуют. И закрыл кавычки$line
будет шарик... Ни одно из этого я вижу упомянутый в ответе. – ilkkachu 16.05.2017, 14:53