Ім'я користувача та пароль у командному рядку з sshfs


15

Я створюю невеликий сценарій резервного копіювання, використовуючи sshfs:

sshfs backup_user@target_ip:/home /mnt/backup

Чи є спосіб включити пароль до цієї команди?

Або є інше рішення для передачі файлів, де пароль для входу може бути включений, крім FTP / SFTP?


4
Ви можете використовувати ssh-gkeygen для створення пари ключів RSA, а потім налаштувати ssh (клієнт та сервер) для використання аутентифікації RSA. Ви робили це раніше для "звичайної" аутентифікації ssh?
повітряний удар

так, але тоді я повинен змінити спосіб підключення серверів через ssh .. наскільки я знаю, автентифікація може бути заснована на ключ або логін / пароль, не обидва одночасно ..
Zaza

2
Вони можуть бути обома. Зазвичай вони є. Таким чином, новостворений користувач може натиснути свою клавішу на сервері, ввівши свій пароль. Згодом вони використовують свій ключ.
xhienne

Відповіді:


11

-o password_stdinне працюють на всіх системах, наприклад, freeBSD. і т.д.

Ви можете також використовувати expect перекладач, він повинен працювати з SSHFS і повинен зробити трюк.

Іншим рішенням може бути sshpass, наприклад, скажімо, що ви створюєте резервну копію каталогу / var / www

Резервне копіювання:

name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www

завантаження резервного файлу на сервер резервного копіювання

sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name

Таким чином, він буде завантажувати каталог із сьогоднішнім резервним копієм.

Але все-таки, як було сказано вище, найкращим (безпечним та простим) способом було б використання пари ключів ssh
. Єдиною незручністю було б те, що вам доведеться один раз пройти процес генерації ключів на кожному сервері вам потрібно з’єднати пару, але краще, ніж зберігати пароль у простому текстовому форматі на всіх серверах, на яких потрібно створити резервну копію :),

Створюючи ключову пару належним чином

  • На локальному сервері

    ssh-keygen -t rsa
    
  • На віддаленому сервері

    ssh root@remote_servers_ip "mkdir -p .ssh"
    
  • Завантаження створених загальнодоступних ключів на віддалений сервер

    cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
    
  • Встановити дозволи на віддаленому сервері

    ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
    
  • Вхід

    ssh root@remote_servers_ip
    
  • Увімкнення протоколу SSH v2

    "" Протокол 2 "в / etc / ssh / sshd_config

  • включення авторизації відкритого ключа в sshd

    коментар "PubkeyAuthentication yes" у / etc / ssh / sshd_config

  • Якщо для StrictModes встановлено значення "Так" в / etc / ssh / sshd_config, тоді

    restorecon -Rv ~/.ssh
    

14

Згідно з посібником, є параметр, -o password_stdinякий може дозволити прочитати пароль зі стандартного вводу, який, ймовірно, може бути перенаправленням. Я ніколи його не використовував, тому міркую.

Зважаючи на це, я настійно раджу проти такого рішення, яке по суті є небезпечним.

sshдуже добре працює з системою приватних / відкритих ключів. Це просто і надійно. Не потрібно вводити пароль або писати його чітко в сценарії оболонки. Просто натисніть свій відкритий ключ на сервері, і ви зможете негайно підключитися.


Чи може хтось надати робочий приклад цього рішення? Я намагаюся наступне, але це не працює:printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
MikeyE

FYI, я повинен був зазначити, що я використовую захищений паролем ключ SSH. Мені вдалося це зробити, використовуючи відповідь, яку надав @ nathan-s-watson-haigh, знайдена тут: unix.stackexchange.com/questions/128974/…
MikeyE

У мене немає жодного відповідного середовища, яке б дозволило мені протестувати ssfs-mount із захищеним паролем SSH-ключем. У будь-якому випадку, що спочатку мене вражає у вашій команді, це те, що я не бачу жодного -o password_stdinваріанту.
xhienne

Дякуємо за вклад. Я спробував наступну команду саме зараз, і вона не запитує пароль, але також не повертається. Це означає, що він просто сидить там і чекає завершення команди, не відображається командний рядок. Я спробував команду: printf "my_password\n" | sshfs -o password_stdin user@hostname:/ $HOME/local_dir PS Я перебуваю на Debian Buster PPS Це працює, але запитує пароль:sshfs -o password_stdin user@hostname:/ $HOME/local_dir
MikeyE

11

Конвеєру "sshfs password"з <<<до -o password_stdinробіт на баш:

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< "sshfs password"

4
Це має бути прийнята відповідь .. працює на будь-якій ОС Linux.
аргон

Отже, як помістити його у файл mnt-media.mount для автоматичного монтажу з systemd?
Жоао Хосе

Один неповнолітній коментар: якщо у вашому паролі є спеціальні символи BASH (на зразок удару (!)), Тоді вам слід використовувати одинарні лапки замість подвійних лапок для пароля.
Кайл

5
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin

Параметр "-o password_stdin" - це те, що дозволяє вам передавати свій пароль.

Однак, ключі є кращим варіантом, якщо ваш постачальник послуг не дозволить вам використовувати їх для sftp. (Це одна з помітних помилок WP Engine.)


Чи можете ви уточнити свою відповідь. Лише один рядок коду не вважається в СЕ доброю відповіддю
Ромео Нінов

@RomeoNinov Я б сказав, що цей пост досить добре відповідає на питання. Не всі схильні писати роман із поясненням того, чому очевидне очевидне.
Satō Katsura

@SatoKatsura Дякую Я все ще вирішую виклик.
iateadonut

2

Сценарій монтажу:

#!/bin/bash
server=<host>
user=<username>
pass=<password>
root=<hostpath>
mount=$(pwd)/sshfs

type sshfs >/dev/null 2>&1 || { echo >&2 "sshfs required"; exit 1; }
type sshpass >/dev/null 2>&1 || { echo >&2 "sshpass required"; exit 1; }

mkdir -p $mount

SSHPASS="$pass" sshfs $server:$root $mount -o ssh_command="sshpass -e ssh -l $user"

Відключити:

#!/bin/bash

mount=$(pwd)/sshfs

fusermount -u $mount

1

слід пам’ятати, що якщо ви використовуєте цю -o password_stdinопцію, можливо, вона не працює, тому що sshfs запитає, підключитись до хоста чи ні (якщо це перший раз, коли ви підключаєтесь до нього, і він не додається до відомого файлу хостів ще). Якщо ви запускаєте його в пакеті, ви ніколи не побачите запитання sshfs. Уникнення цього шляху є:

  1. додати -o StrictHostKeyChecking=noопцію до sshfs або
  2. запустіть sshfs вручну один раз, щоб додати хост до відомого файлу хостів

0

Автоматичний скрипт для підключення sftp до sshfs

#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.