Имя файла отображается с? char, когда `ls`, а с символом нежелательной почты, когда` ls | grep fran`?

Недавно мне пришлось сделать это самому, поэтому я решил добавить ответ, который показывает. как это можно сделать (с версиями OpenSSH 7.2 или новее) в одну строку используя подстановку процессов:

ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)

Следующий текст объясняет, как работают эти команды и подчеркивает некоторые из различия в поведении между старыми и новыми версиями OpenSSH утилиты.

Получение открытых хост-ключей

Команда ssh-keyscan была разработана для того, чтобы пользователи могли получать открытые хост-ключи без необходимости аутентификации. ключи без необходимости аутентификации на сервере SSH. Из man-страницы:

ssh-keyscan - это утилита для сбора открытых ключей ssh-хоста для нескольких хостов. Она была разработана для помощи в создании и проверке. ssh_known_hosts files.

Тип ключа

Тип извлекаемого ключа задается с помощью опции -t.

  • rsa1 (устаревший протокол SSH версии 1)
  • rsa
  • dsa
  • ecdsa (последние версии OpenSSH)
  • ed25519 (последние версии OpenSSH)

В современных релизах OpenSSH, по умолчанию используются следующие типы ключей: rsa (начиная с версии 5.1), ecdsa (начиная с версии 6.0) и ed25519 (начиная с версии 6.7).

В старых версиях ssh-keyscan (до версии OpenSSH 5.1), в качестве параметра по умолчанию тип ключа был устаревшим rsa1 (SSH Protocol 1), поэтому типы ключей должны быть явно указаны:

ssh-keyscan -t rsa,dsa hostname

Получить хэши отпечатков ключей Base64

ssh-keyscan печатает ключ хоста сервера SSH в Base64-кодировке формате. Чтобы преобразовать его в хэш отпечатка пальца, можно использовать утилиту ssh-keygen. использовать с опцией -l для печати отпечатка указанного открытого ключа. ключа.

При использовании Bash, Zsh (или оболочки Korn), процесс подстановка может быть использована для удобной однострочной команды:

ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)

Примечание: В версиях OpenSSH до 7.2, функции, используемые ssh-keygen для чтения файлов, не очень хорошо обрабатывали именованные каналы (FIFO), поэтому этот метод не работал, что требовало использования временных файлов.

Алгоритмы хэширования

Последние версии ssh-keygen печатают SHA256 хэши отпечатков ключей. Для получения MD5 хэшей отпечатков ключей сервера (старое поведение), опция -E можно использовать для указания алгоритма хэширования:

ssh-keygen -E md5 -lf <(ssh-keyscan hostname 2>/dev/null)

Использование конвейера

Если используется оболочка POSIX (например, dash), которая не поддерживает подстановку процессов, другие решения с использованием временных файлов будут работать. Однако в новых версиях OpenSSH (начиная с 7.2), можно использовать простой конвейер, поскольку ssh-keygen будет принимает - в качестве имени файла для стандартного потока ввода, что позволяет выполнить однострочную конвейерную команду.

ssh-keyscan hostname 2>/dev/null | ssh-keygen -E md5 -lf -

0
11.07.2018, 09:41
1 ответ

в замазке я использую

Конфигурация -> Windows -> Перевод -> Набор удаленных символов :UTF -8

в линукс

LANG=en_US.UTF-8

все работает нормально

Linux > echo élève > française
Linux > od -c française
0000000 303 251   l 303 250   v   e  \n
0000010
Linux > ls | od -c
0000000   f   r   a   n 303 247   a   i   s   e  \n
0000013
Linux > ls
française

и полныйstty

Linux > stty -a
speed 38400 baud; rows 40; columns 129; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

при переходе из Windows в Linux файл с именемvérification.xml

в душ

vÚrification.xml          | 99 kB |  99.9 kB/s | ETA: 00:00:00 | 100%

в линукс

Linux > LANG=C.utf8 ls
fran??aise  v?rification.xml
Linux > LANG=POSIX ls
fran??aise  v?rification.xml
Linux > LANG=french ls
française  v▒rification.xml
Linux > LANG=fr_FR.iso88591 ls
française  v▒rification.xml
Linux > LANG=fr_FR.utf8 ls
française  v?rification.xml
0
28.01.2020, 04:18

Теги

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