44

У меня есть сервер, к которому я часто обращаюсь по ssh, потому что я вычисляю на нем. Теперь вычислительный центр явно запрещает SSH-ключи, потому что они "небезопасны". Они считают, что вводить мой пароль на клавиатуре каждый раз, когда это возможно перед другими людьми, - гораздо более безопасный способ входа в систему.

Сейчас; Я не могу изменить свое мнение (я пытался).

Есть ли способ хотя бы временно хранить пароли SSH, как GIT может хранить пароли в кеше в течение определенного времени?

4 ответа4

62

Повторное использование соединения

SSHv2 позволяет одному и тому же аутентифицированному соединению устанавливать несколько «каналов» - интерактивную оболочку, пакетную команду, SFTP, а также второстепенные, такие как переадресация агента или переадресация TCP. Ваш сервер, вероятно, поддерживает мультиплексирование соединений по умолчанию. (Если ваши администраторы жалуются, он нигде не кэширует ваш пароль - он кэширует все соединение.)

С OpenSSH у вас есть опции ControlMaster и ControlPath (-M и -S), чтобы использовать это:

  1. Запустите «главное» SSH-соединение, используя -M . (Поскольку у вас еще нет ControlPath в вашей конфигурации, вам нужно указать его в командной строке, используя -S . Он должен жить долго, поэтому я добавляю -fN для удаления в фоновом режиме; они технически необязательны в противном случае.)

    $ ssh foo@bar.example.com -fNMS ~/.ssh/bar.socket
    foo@bar.example.com's password:
    

    Вы вернулись к местной оболочке.

  2. Начать новое соединение через мастера:

    $ ssh foo@bar.example.com -S ~/.ssh/bar.socket
    

    Ты в.

  3. Чтобы сделать это полезным для Git/rsync/SFTP, вам нужно настроить ControlPath в вашей конфигурации, потому что вы не сможете всегда указывать -S :

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
    

Вы можете автоматизировать это - последние версии OpenSSH также имеют ControlPersist который автоматически устанавливает главное соединение в фоновом режиме, если его еще нет. Это позволяет пропустить шаг 1 и просто использовать ssh, как обычно.

  1. Конфигурация в ~/.ssh/config:

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlMaster auto
        ControlPersist 15m
    
  2. Первое соединение запрашивает пароль:

    $ ssh foo@bar.example.com
    foo@bar.example.com's password:
    [foo@bar:~]$ exit
    
  3. Второе не:

    $ ssh foo@bar.example.com
    [foo@bar:~]$ yay
    

Чтобы управлять мастером мультиплекса (остановить его или настроить переадресацию TCP), используйте параметр -O .

Подобный метод поддерживается в последних версиях PuTTY.

19

Используйте sshpass

sshpass (github, man page) - это инструмент, который автоматически передает пароль в ssh. Безопасный способ использовать это это:

% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password

% sshpass -f ~/.ssh/compute_password ssh foo@host

Это прочитает пароль из ~/.ssh/compute_password , очень похоже на файл с закрытым ключом без ключевой фразы. Вы можете поместить команду sshpass в небольшой скрипт оболочки или псевдоним оболочки, чтобы избежать ввода этой полной команды. К сожалению, я не нашел способа сделать это из ~/.ssh/config .

(Также можно указать пароль непосредственно в командной строке для sshpass , но этого следует избегать, так как он дает пароль любому, кто может сделать ps)

Сравнение с другими методами

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

Он также менее безопасен, чем ответ @ grawity о повторном использовании соединения, но имеет то преимущество, что вообще не требует ввода пароля в интерактивном режиме.

Вы можете рассматривать ответ @ grawity как альтернативу аутентификации pubkey с использованием парольной фразы и кэширования закрытого ключа (т.е. ssh-agent). Тогда мой ответ будет альтернативой аутентификации pubkey без ключевой фразы в файле закрытого ключа.

1

Используйте менеджер паролей.

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

Не нужно копировать, запоминать что-либо (кроме пароля для разблокировки базы данных), и вы можете иметь надежный пароль, не используя эти 30 символов каждый раз, когда вы пытаетесь войти в систему.

Вы можете выбрать свой любимый из этого списка:https://en.wikipedia.org/wiki/List_of_password_managers

0

Другой альтернативой является использование ssh-клиента с графическим интерфейсом. На Windows очевидным выбором будет PuTTY. Существует также версия PuTTY для Linux, в частности, большинство дистрибутивов на основе Debian, таких как Ubuntu, обычно включают PuTTY в свои репозитории.

Другой действительно хороший клиент - Termius. Он поддерживает не только Windows и Linux, но также OSX, iOS и Android. Несмотря на то, что он был в первую очередь предназначен для телефонов, настольная версия на самом деле довольно хороша.

Если я не ошибаюсь, у почтенного Гипертерминала в Windows также был / был встроен ssh-клиент, но я не пользовался окнами очень долгое время, поэтому я не совсем уверен.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .