добавление пароля в .ssh / config

24

Я использую Ubuntu 12.04. Я использую ssh для подключения ко многим серверам ежедневно, поэтому я помещаю их параметры в файл .ssh / config ; так :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

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

Ахо Августин
источник
10
Вот для чего нужны пары ключей.
Майкл Хэмптон

Ответы:

31

Нет, нет способа указать или предоставить в командной строке пароль неинтерактивным способом для аутентификации ssh с использованием встроенного механизма openssh. По крайней мере, не то, что я знаю. Вы можете жестко закодировать ваш пароль в ожидаемый скрипт, но это тоже не очень хорошее решение.

Вы определенно хотели бы использовать пары ключей для аутентификации без пароля, как сказал Майкл, в конце концов закрытый ключ - это большой пароль в файле.

Данила Ладнер
источник
Дело в том, что это мои серверы клиентов, и они не разрешают вход с использованием ключей. Я пишу сценарий bash, используя функцию ожидаемого входа на все серверы, где хранятся учетные данные, взятые с USB-накопителя. Спасибо
Ajo Августин
1
Совершенно небезопасно. Единственное, что можно предложить в этом скрипте, - заблокировать этот файл с жесткими правами доступа к файлу.
Данила Ладнер
1
Если они не разрешают ключи, они неправильно понимают, как работает ssh - разрешение входа по паролю открывает вас для атак по словарю и т. Д. (Хотя и очень, очень медленных) - почти невозможно выполнить то же самое с парой закрытых ключей, и если они Вы беспокоитесь о том, что ключи могут попасть в чужие руки. Вы можете зашифровать паролем закрытую часть ключа, чтобы иметь возможность использовать два фактора (пароль также может быть запомнен в вашей цепочке для ключей / агентом ssh). )
Алекс Берри
Обучите своих клиентов. Объясните им, что лучше отключить аутентификацию по паролю и разрешить только ключи, обратные.
Никита Киприянов
20

Чтобы избежать цепочки комментариев: Да, это небезопасно (даже небезопасно). Я настоятельно рекомендую вам делать это только в лабораторной ситуации в изолированной сети или в аналогичной ситуации, в которой не задействованы производственные серверы или потенциально производственный сервер без полного сброса / форматирования.

Я хотел это настроить, так как не думаю, что мой коммутатор 2950 поддерживает закрытые / открытые ключи, и я надеюсь, что когда-нибудь получу эти знания, но я еще не там.

Используя псевдоним и sshpass, это может быть достигнуто.

  1. Установить sshpass
  2. Измените ваш файл .ssh / config, указав имя пользователя, указанное в вопросе.
  3. Добавьте псевдоним к своему терминалу (я использовал .bashrc и рекомендовал бы против настроек gloabl)
  4. Используйте псевдоним для входа в цель

Мой пример псевдонима:

alias ssc='sshpass -pcisco ssh'

Где «cisco» - это пароль. Обратите внимание, что между -p и паролем нет пробела.

Использование (ссылаясь на вопрос):

ssc server1

Примечание: это отвечает на вопрос в заголовке только для тех, кто использует поисковые системы. Если вы используете серверы, подобные примеру вопроса, следует использовать пары секретный / открытый ключ, а не этот ответ

DarkSheep
источник
Единственный возможный обходной путь, когда вы по какой-то причине не можете работать с ключами.
Sjas
Работает! Потрясающе.
Рахул
Я бы предложил заменить псевдоним полным сценарием оболочки; это дало бы возможность динамически выбирать, какой файл паролей использовать в зависимости от параметра хоста.
7heo.tk
Можно очень хорошо поставить пробел между -p и паролем, как это часто бывает с программами
cli
10

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

сначала сгенерируйте свой ключ:

ssh-keygen

Затем скопируйте ключ на свои серверы / рабочие столы:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Вот и все. Вас никогда больше не попросят ввести пароль.

Я также рекомендую удалить авторизацию пароля в целом, но это зависит от вас.

Str82DHeaD
источник
1
Спасибо за ссылку на ssh-copy-id! Раньше я использовал некоторые хитрые вещи, как, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"но эта программа чище и проясняет намерение.
masterxilo
3

Нет никакого способа сделать это с помощью ssh, это настолько небезопасно, насколько это возможно.

Как отметил Данила, вы можете использовать ожидаемые сценарии, но я бы не стал беспокоиться.

Интересно, чего ты пытаешься достичь? Хотите прыгать с одного сервера на другой? В этом случае вы хотите настроить и использовать ssh-agent на своей рабочей станции и включить переадресацию агента на целевые хосты; таким образом обмен учетными данными будет направлен вашему локальному агенту без необходимости копировать ваш личный ключ.

Эдди
источник
VisualStudio имеет концепцию персональных токенов доступа, которые похожи на пароли для конкретных приложений, где эта функция будет полезна.
spuder
1

Я использую этот скрипт из ~/.local/binкаталога

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Что позволяет мне указать фразу-пароль как #PS <password>в .ssh/configфайле.

Но, как все говорят, что лучше использовать ssh-keysс , ssh-agentкогда это возможно

mnach
источник
0

Правильный способ справиться с этой ситуацией - использовать ssh-агент на основе сеанса. Вот как:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

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

Шокирован, что так долго этого ответа не было здесь!

pranalli
источник
Причина, по которой этого не было, вероятно, в том, что автор специально сказал, что не хочет использовать пару открытый / закрытый ключ.
Дженни Ди говорит восстановить Монику
1
Я пропустил это, спасибо. Затем я добавлю, что не использовать пару ключей для SSH - это действительно очень плохая идея. Это более безопасно и более удобно ... Я бы призвал ОП пересмотреть. Использование пары ключей без ключевой фразы намного более безопасно, чем отсутствие пары ключей и пароля. Но в идеале можно использовать пару ключей с парольной фразой и использовать шаги, которые я предоставил, если / когда они находятся в сеансе, который требует хранения своей парольной фразы.
Праналли
-1

Вы можете сделать это более безопасным способом, используя sshpass

  1. Установите свой пароль без истории

    экспорт PS = ваш_пароль ; история -d $ (история 1)

  2. Установите псевдоним хоста, как указано выше в ~ / .ssh / config

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

sshpass -p $ PS ssh host_alias

Ваша среда хранит ваш пароль, и это опасно, что любые скрипты могут утечь этот пароль, если вы не знаете, что вы запускаете

ashishWaghmare
источник
Нет, это не безопасно. И это довольно некрасиво.
7heo.tk
Разве это не «решение» дольше, чем проблема? Все эти лишние шаги, и вам все равно нужно набирать sshpass -p $PS ...
текст