Поиск по сайту:

sshpass: Отличный инструмент для неинтерактивного входа по SSH - Никогда не используйте на рабочем сервере


В большинстве случаев системные администраторы Linux входят на удалённые серверы Linux с помощью SSH, используя либо пароль, либо вход без пароля, либо аутентификацию SSH на основе ключа.

А что если вы хотите предоставить пароль вместе с имя пользователя прямо в запросе SSH? Здесь на помощь приходит sshpass.

sshpass — это простой и легковесный инструмент командной строки, который позволяет нам передавать пароль (неинтерактивную аутентификацию паролем) непосредственно в командную строку, чтобы можно было выполнять автоматизированные shell-скрипты для создания резервных копий через планировщик cron.

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

style="color: red;">Важно: Использование sshpass считается наименее безопасным, так как оно раскрывает пароль всем пользователям системы через командную строку с помощью простой команды “ps ”. Я настоятельно рекомендую использовать авторизацию SSH без пароля.

Установите sshpass на системах Linux

В системах на базе RedHat/CentOS сначала необходимо включить репозиторий Epel на вашей системе, чтобы установить его с помощью команды yum, как показано.

# yum install sshpass
# dnf install sshpass    [On Fedora 22+ versions]

На Debian/Ubuntu и их производных вы можете установить это с помощью команды apt-get, как показано.

$ sudo apt-get install sshpass

В качестве альтернативы вы можете установить из исходного кода, чтобы получить последнюю версию sshpass, сначала загрузите исходный код, затем распакуйте содержимое tar-файла и установите его следующим образом:

$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
$ tar -xvf sshpass.tar.gz
$ cd sshpass-1.06
$ ./configure
# sudo make install 

Как использовать sshpass в Linux

sshpass используется вместе с ssh, вы можете просмотреть все параметры использования sshpass с полными описаниями, выполнив следующую команду:

$ sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Как я уже упоминал ранее, sshpass более надёжен и полезен для целей скриптинга, рассмотрите приведённые ниже примерные команды.

Войдите на удалённый сервер Linux по SSH (10.42.0.1), используя имя пользователя и пароль, и проверьте использование дискового пространства файловой системы удалённой системы, как показано.

$ sshpass -p 'my_pass_here' ssh [email  'df -h' 

style="color: red;">Важно: Здесь пароль передается через командную строку, что на практике небезопасно, и использование этой опции не рекомендуется.

sshpass - удалённый вход в Linux через SSH

Однако, чтобы предотвратить отображение пароля на экране, вы можете использовать флаг -e и ввести пароль как значение переменной окружения SSHPASS, как показано ниже:

$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh [email  'df -h' 

sshpass - Скрыть пароль в запросе

style="color: red;">Примечание: В приведенном выше примере переменная окружения SSHPASS используется только временно и будет удалена при перезагрузке.

Чтобы навсегда установить переменную окружения SSHPASS, откройте файл /etc/profile и введите команду export в начале файла:

export SSHPASS='my_pass_here'

Сохраните файл и выйдите, затем выполните команду ниже, чтобы изменения вступили в силу:

$ source /etc/profile 

С другой стороны, вы также можете использовать флаг -f и поместить пароль в файл. Таким образом, вы можете прочитать пароль из файла следующим образом:

$ sshpass -f password_filename ssh [email  'df -h'

sshpass - Использовать файл с паролем для входа

Вы также можете использовать sshpass для передачи файлов с помощью scp или для резервного копирования/синхронизации файлов через rsync используя SSH, как показано:

------- Transfer Files Using SCP ------- 
$ scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
$ rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Для большего использования я предлагаю вам прочитать страницу руководства sshpass, введите:

$ man sshpass

В этой статье мы объяснили sshpass — простой инструмент, который позволяет выполнять аутентификацию с паролем без взаимодействия. Хотя этот инструмент может быть полезен, настоятельно рекомендуется использовать более безопасный механизм аутентификации с открытым ключом SSH.

Пожалуйста, оставьте вопрос или комментарий через раздел обратной связи ниже для любых дальнейших обсуждений.