Як я можу уникнути необхідності введення пароля для команди scp шляхом жорсткого кодування пароля до мого сценарію?


6

Я створив скрипт bash, який іноді потребує мене для введення деякої інформації (іншого машинного пароля / імені користувача), коли я запускаю її.

Чи є спосіб запобігти цьому, ввівши (жорстко кодуючи) цю інформацію в код? Таким чином, коли я його виконую, він буде працювати плавно, не вимагаючи від мене нічого ввести.

Це команда:

scp /home/machine1/backup/test.txt /home/machine2/backup

Замість того, щоб вводити пароль machine2, я хочу жорстко кодувати його у своєму сценарії.


@sudodus Bravo. Для тих, кого все ще цікавить мета-запитання, яке я задав, тут
старійшина Гек

Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Томас Уорд

Відповіді:


13

Аутентифікація ключа SSH зручна та безпечна

Будь ласка, не вкладайте пароль в оболонку, оскільки інші люди її легко читають.

  • Увійти за допомогою аутентифікації ключів до ssh- це те, що потрібно.

    Таким чином, вам не потрібно пароля, і він також більш безпечний. Це особливо важливо, якщо комп'ютер видно в Інтернеті. Якщо ви не вважаєте, що це важливо, спробуйте записати спроби входу, які ви отримаєте на наступний тиждень.

    • Біг

      ssh-keygen

      вам, ймовірно, запропонують захистити ключ за допомогою парольної фрази .

    • Не робіть цього (натисніть Enter, щоб продовжити без парольної фрази, коли ssh-keygenзапитуєте), тому що ви не хочете вводити пароль або парольну фразу під час запуску сценарію та прибуття до scpкомандного рядка.

      Без автентифікації ключів та паролів з чітким текстом дуже важливо мати чіткі дозволи на оболонці, і це гарна ідея також для оболонок, пов’язаних із безпекою, без чітко-текстового пароля. Доступні права за замовчуванням для файлу сценарію (коли він створений десь у вашому домашньому каталозі)644

      $ ls -l shellscript 
      -rw-r--r-- 1 sudodus sudodus 349 dec 23 10:54 shellscript

      і ви можете дати своїм файлам сценаріїв виконувати дозволи для всіх, 755

      $ chmod 755 shellscript
      $ ls -l shellscript 
      -rwxr-xr-x 1 sudodus sudodus 349 dec 23 10:54 shellscript

      але вам краще скоротити його до 600жодного дозволу, окрім вашого власного ідентифікатора користувача, і жодного дозволу на виконання

      $ chmod 600 shellscript 
      $ ls -l shellscript
      -rw------- 1 sudodus sudodus 349 dec 23 10:54 shellscript

      і ви не можете запустити його безпосередньо ./shellscript, тому використовуйте

      bash shellscript       # when shellscript in the current directory
      bash path-to-shellscript/shellscript  # from other directories
    • Зробіть це (введіть парольну фразу, коли ssh-keygenзапитуєте), якщо ви хочете підвищити рівень безпеки, оскільки ваш приватний ключ буде захищений (зашифрований парольною фразою), але тоді вам потрібно буде набрати парольну фразу під час запуску сценарію scp.

    • Ви повинні скопіювати файл ключа, наприклад, з

      ssh-copy-id <username>@<host>
    • scpвикористовує sshдля передачі даних. Тож коли ключі на місці, вона повинна працювати без пароля.


  • Кожну машину Linux можна зробити sshсервером, встановивши openssh-serverв Ubuntu з apt,

    sudo apt update
    sudo apt install openssh-server


1
"іншим людям це легко читати" ... Як хто? Поки ви не включаєте пароль в аргумент команди (чого можна уникнути), чому сценарій +600 вразливіший, ніж хтось просто копіює ваш приватний ключ?
Олі

@ Олі, я відредагував відповідь у відповідь на ваш коментар: "Без парольної фрази важливо мати строгі дозволи на оболонці ..." і додав "Зробіть це (введіть пароль, коли запитає ssh-keygen), якщо ви хочете вища безпека ... ". Чи хочете я щось додати чи змінити [що-небудь]?
sudodus

2
Щоб отримати найкраще з обох світів, введіть пароль для ssh-keygen, а потім скористайтеся ssh-агентом, щоб розблокувати ваш ключ, де потрібно ввести свій пароль один раз, а потім ви можете використовувати ключ кілька разів протягом одного сеансу, не маючи при цьому вказати пароль. Не зроблять, якщо не запускають сценарій інтерактивно, звичайно, як у роботі з cron.
Алекс

1
Ви можете згадати, ssh-addщо дозволяє захистити свій ключ, але введіть пароль лише один раз за сеанс.
Рафаель

@Raphael, Дякую за згадування ssh-add:-)
sudodus

1

Налаштуйте ssh-доступ до свого сервера за допомогою пари відкритих / приватних ключів rsa. Зберігайте ваш приватний ключ, завантажений у пам'яті. Тоді ви можете зробити scp або ssh на сервері без пароля (крім того, що полегшує життя, автентифікація ключових файлів значно безпечніша, ніж автентифікація пароля)

Ось як налаштувати ssh для аутентифікації ключових файлів: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2


0

Використовуйте sshpass. В Ubuntu ви можете встановити його sudo apt install sshpass.

Цей загальний синтаксис повинен зробити трюк:

sshpass -p<password> <source> <destination>

Але це не безпечно. Не давайте зручності занадто далеко перед базовою безпекою. Будь-який інший користувач у системі може бачити команди та аргументи, якими керуються інші користувачі. Для захисту від цього ви можете sshpassпрочитати з змінної середовища.

export SSHPASS=<password>
sshpass -e scp <source> <destination>

Я також рекомендую запустити, unset SSHPASSякщо нічого іншого у вашому сценарії не довіряти.


4
Варіант -p слід вважати найменш захищеним із усіх параметрів sshpass. Усі користувачі системи можуть бачити пароль у командному рядку простою командою "ps". Sshpass робить мінімальну спробу приховати пароль, але такі спроби приречені на створення перегонових умов без фактичного вирішення проблеми. Користувачам sshpass рекомендується використовувати одну з інших технік передачі пароля, які є більш безпечними.
Старійшина Гейк

ви можете звернутися до сторінки чоловіка для sshpass і переглянути розділ з міркувань безпеки, звідки цей коментар .
Старійшина Гейк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.