Вопрос по stdin, ssh, passwords – Как заставить ssh получить пароль от stdin

19

Как вы можете заставить SSH читать пароль из стандартного ввода, который он не делаетпо умолчанию?

Ваш Ответ

7   ответов
3

Список рассылки FreeBSD рекомендуетожидать библиотека.

Если вам нужен программный логин SSH, вы действительно должны бытьиспользуя логины с открытым ключомоднако, очевидно - таким образом гораздо меньше дыр в безопасности по сравнению с использованием внешней библиотеки для передачи пароля через .I 'stdin

2

Я не уверен, почему вам нужна эта функциональность, но, похоже, вы можете получить такое поведение с помощью ssh-keygen.

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

http://www.linuxproblem.org/art_9.html

2

дистилляцияэтот ответ оставляет простой и общий скрипт:

#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "[email protected]"

Сохранить какpassсделатьchmod +x pass и затем используйте это так:

$ echo mypass | pass ssh [email protected] ...

Если его первый аргумент содержитpassword: затем он передает свой вход на свой выход (cat) иначе он запускает то, что было представлено после установки себя в качествеSSH_ASKPASS программа.

когдаssh сталкивается с обоимиSSH_ASKPASS А ТАКЖЕDISPLAY установить, он запустит программу, указаннуюSSH_ASKPASSПередав ему подсказку[email protected]'s password:

Вам также может понадобиться пройти-oStrictHostKeyChecking=no кssh команда, если у вас нетт SSH 'заглянул в этот хост раньше; в противном случае этоУкажите пользователю, доверяют ли они неизвестному ключу хоста. Очевидно, делать это только если выреконечно что вы доверяете неизвестному ключу хоста. villapx
16

основываясь на этомсообщение ты можешь сделать:

Создайте команду, которая открывает сессию SSH, используяSSH_ASKPASS (искать SSH_ASKPASS намужик сш)

$ cat > ssh_session <

НОТА: Чтобы избежать ssh пытаться спросить на tty мы используемsetsid

Создайте скрипт, который возвращает ваш пароль (примечаниеэхо "эхо)

$ echo "echo your_ssh_password" > /path/to/script_returning_pass

Сделайте их исполняемыми

$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass

попытайся

$ ./ssh_session

Имейте в виду, что ssh означает защищенную оболочку, и если вы храните свой пользователя, хост и пароль в текстовых файлах, вы вводите инструмент в заблуждение, создавая возможный пробел в безопасности

более того (или если вы нене иметь setsid) - в дополнение к настройке DISPLAY и SSH_ASKPASS, вам также может понадобиться указать STDIN из / dev / null, чтобы убедить ssh-add, что это 'не на терминале: ssh-add / path / to / key < / DEV / нуль mike
Может кто-нибудь обновить решение, чтобы принять предложения из комментариев? M. Barbieri
Другое требование состоит в том, что DISPLAY должен быть установлен. Если вы используете X, вы выигрализаметить Если ты нет, вы будете. Чтобы сделать приведенный выше сценарий ssh_script более переносимым, добавьте следующее: export DISPLAY; DISPLAY = фиктивная Blaine
Я использовал эту идею для получения пароля отpass, чтобы датьssh-add в общем случае, генерируя скрипт askpass по мере необходимости.milosophical.me/blog/2018/ssh-pass.html mike
4

Старый пост возрождается ...

Я нашел это, когда искал решение той же самой проблемы, я нашел что-то, и я надеюсь, что кто-то когда-нибудь найдет это полезным:

  1. устанавливатьSSH-askpass программа (apt-get, yum ...)
  2. УстановитьSSH_ASKPASS переменная ()export SSH_ASKPASS=/usr/bin/ssh-askpass
  3. Из терминала откройте новое ssh-соединение без неопределенной переменной TERMINAL ()setsid ssh [email protected]

Это выглядит достаточно просто, чтобы быть безопасным, но еще не проверял (только в локальном безопасном контексте).

Мы здесь.

12

Ты можешь использоватьsshpass что, например, в официальномрепозитории Debian, Пример:

$ apt-get install sshpass
$ sshpass -p 'password' ssh [email protected]
к сожалению, это единственное решение, которое я использую, которое неотлично подходит для SSH Jumphosts. Альтернативаexpectчто яЯ думаю, это больше проблем, чем этос работой. Sridhar-Sarnobat
Доморощенный (macOS) запретил это :( " Мы выиграли'не добавляйте sshpass, потому что начинающим пользователям SSH слишком легко разрушить SSH 'с безопасностью. " mike
9

Вы можете'т с большинством клиентов SSH. Вы можете обойти это с помощью SSH API 'с, какParamiko для Python. Будьте осторожны, чтобы не отменять все политики безопасности.

Любая идея, почему это не такт работаешь? Интуитивно понятно. Sridhar-Sarnobat
Это не должноЭто работает, потому что это вдохновит младших системных администраторов на написание сценариев с паролем SSH, запутанным в логике сценария. В среде сетевого и системного администрирования должно быть четкое разделение между конфиденциальной информацией, с одной стороны, и выполнением задач, с другой. Проверка подлинности пароля просто недостаточно безопасна. Поскольку ssh широко используется в контексте sysadmin, попытка держать пользователей подальше от безопасности только по паролю - хорошая идея. pvoosten

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