Использование scp с паролями [дубликат]

Да, такие случаи бывают.

В случае символических ссылок в системе Linux с GNU ls , ls -l покажет размер ссылки, а wc -c разрешит фактический файл и прочитает количество байтов из него. Ниже вы можете увидеть, что ls -l сообщает о 29 байтах, а wc сообщает о 172 байтах в фактическом файле.

$ ls -l /etc/resolv.conf                                                                                                 
lrwxrwxrwx 1 root root 29 1月  17  2016 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
$ wc -c /etc/resolv.conf                                                                                                 
172 /etc/resolv.conf
$ wc -c /var/run/resolvconf/resolv.conf                                                                                  
172 /var/run/resolvconf/resolv.conf
$ ls -l /var/run/resolvconf/resolv.conf                                                                                  
-rw-r--r-- 1 root root 172 1月  15 15:49 /var/run/resolvconf/resolv.conf

В случае виртуальных файловых систем , , таких как / proc или / sys , многие файлы там будут иметь размер 0 ls -l . В файловой системе / dev у нас есть множество специальных файлов, таких как символьные устройства и блочные устройства - wc -c зависает от них и ls -l показывает ] старшие и младшие числа вместо размера.

Именованные каналы будут сообщены как 0 байтов с помощью ls -c , но wc -c фактически прочитает содержимое канала, поэтому технически он скажет вам, сколько данных находится в именованном канале:

$ mkfifo named.pipe                                                                                                      
$ echo "This is a test" > named.pipe &
[1] 2129
$ ls -l named.pipe
prw-rw-r-- 1 xieerqi xieerqi 0 1月  16 08:40 named.pipe|
$ wc -c named.pipe
15 named.pipe
[1] + Done                 echo "This is a test" >named.pipe 

Для обычных файлов размер должен быть одинаковым.


Смысл ls -l и wc -c , а также то, как они работают, также отличается. wc -c фактически открывает файл для чтения (вы можете увидеть, например, если вы запустите strace wc -c / etc / passwd ). ls -l выполняет только вызов stat () для них. Это также объясняет, почему в / proc ls -l отображается нулевой размер - вы не можете определить эти файлы, потому что они не являются "настоящими" или фактически хранятся на жестком диске / ssd. wc -c вместо этого считывает содержимое этого файла и вычисляет его размер.

Наконец, ls -l - это всего лишь инструмент для интерактивного вывода списка элементов. Он редко подходит для написания сценариев. Если вам действительно нужно прочитать данные, используйте вместо них wc -c .

Обратите внимание, что для написания сценариев и оценки размера файла ls не лучший кандидат. Фактически, это одна из общепринятых практик, избегая синтаксического анализа ls вывода . Используйте du -b , чтобы узнать размер файла.

1
23.05.2017, 12:41
2 ответа

Есть несколько вариантов:

  1. использование sshpass

Выполнить команду:

sshpass -p 'password' scp filename user@host:
  • Установить sshpass:

    • Ubuntu:

    sudo apt install sshpass

sshpass man

sshpass — неинтерактивный поставщик паролей ssh ​​

sshpass — это утилита, предназначенная для запуска ssh в указанном режиме в качестве "клавиатурно-интерактивной" аутентификации по паролю, но в неинтерактивный режим.

ssh использует прямой доступ к телетайпу, чтобы убедиться, что пароль действительно выдается пользователем интерактивной клавиатуры. Sshpass запускает ssh в выделенный tty, обманывая его, заставляя думать, что он получает пароль от интерактивного пользователя.

Команда для запуска указывается после собственных параметров sshpass.Обычно это будет "ssh" с аргументами, но с таким же успехом может быть и любой другой команда. Однако запрос пароля, используемый ssh, в настоящее время жестко запрограммирован в sshpass.

  1. Используя expect (или другой скрипт)

напишите скрипт, который будет вводить пароль, как только он определит запрос пароля ssh

  1. Использование ssh с парой ключей (вместо использования пароля)

ИМХО - Это самый безопасный способ, не требующий использования паролей.

Использование открытого/закрытого ключа для выполнения операции ssh или scp без ввода пароля.

  • Дополнительную информацию можно найти в этом ответе

  • Подробную информацию можно найти здесь

5
27.01.2020, 23:14

Уже есть ответ, как это сделать, поэтому я сосредоточусь на том, почему нет.

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

Вместо этого используйте открытый/закрытый ключ и используйте ключевой агент для временного запоминания вашего ключа.

2
27.01.2020, 23:14

Теги

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