Bash: управление SSH - PullRequest
       6

Bash: управление SSH

8 голосов
/ 17 декабря 2009

У меня есть этот bash-файл, который запрашивает IP, пароль и т. Д. Для OpenSSH на устройстве.

Теперь, если я использую ssh root@ip, я должен ввести пароль. Это действительно раздражает. Во-вторых, я не могу позволить своему сценарию отправлять ему команды.

Это то, что я хочу ->

  1. Не вещь пароля; я уже что-то нашел; но он говорит мне, что команды не найдены?:

    #!/usr/bin/expect -f

    spawn ssh root@$IPADDR

    expect "password:"

    sleep 1

    send "$rpass\r"

    1. Я хочу, чтобы пользователь мог видеть некоторые меню, из которых он может выбирать; после этого; каждая команда сделана для него. Так как новое окно или что-то в этом роде?

    2. Я не хочу использовать: -Любые внешние вещи -Нет дополнительного редактирования SSH-соединения

BASH INFO: GNU Bash, v. 4.0.33 (1) -релиз (i486-pc-linux-gnu), работающий на Linux Mint. Но он должен быть доступен для нескольких дистрибутивов Linux, а также для Mac?

Ответы [ 7 ]

15 голосов
/ 31 января 2014

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

SSH-серийник

Это создаст новый ключ SSH в ~/.ssh/id_rsa.pub. После этого просто запустите:

ssh-copy-id user@my.server.com

Если вы работаете в OS X или на другом компьютере, у которого нет «ssh-copy-id», существует одна строка альтернатив , например, такая:

cat ~ / .ssh / id_rsa.pub | ssh user @ machine "mkdir ~ / .ssh; cat >> ~ / .ssh / authorized_keys"

В конечном итоге вам просто нужно добавить содержимое ~/.ssh/id_rsa.pub на локальном компьютере к ~/.ssh/authorized_keys на удаленном сервере. То, как вы это делаете, зависит от вас, приведенные выше просто быстрые клавиши для этого.

3 голосов
/ 17 декабря 2009

Многие инструменты идут на все, чтобы помешать тому, что вы делаете. Я рекомендую использовать открытые ключи ssh для решения этой проблемы вместо паролей.

Большая альтернатива - написать собственный модифицированный ssh-клиент на основе открытого исходного кода, чтобы взять под контроль управление паролями.

О, ну, я забыл. Вы, вероятно, можете перехитрить это с помощью pty, так как тогда / dev / tty будет вашим контролем. ожидать, может помочь вам в этом.

2 голосов
/ 01 марта 2017

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

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

sshpass -p raspberry ssh pi@192.168.0.145

это можно комбинировать с

ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no pi@192.168.0.145

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

Опять же, используйте это только в системах разработки, где разные машины имеют общий IP и безопасность не важна.

https://ownyourbits.com/2017/02/22/easy-passwordless-ssh-with-sshh/

2 голосов
/ 17 декабря 2009

Ожидайте - обычный инструмент для автоматизации интерактивных сеансов.

1 голос
/ 31 августа 2015

Даже если бы я использовал для этого ключи pem, а это старая тема, я также хотел бы процитировать sshpass

1 голос
/ 18 декабря 2009

Рассматривали ли вы Парамико ? Это Python-библиотека для взаимодействия с SSH.

1 голос
/ 17 декабря 2009

Используйте ssh-keygen для создания открытого ключа для вашего компьютера, затем скопируйте локальный ~/.ssh/id_rsa.pub или ~/.ssh/identity.pub в удаленную систему в ~/.ssh/authorized_keys.

Возможно, вам понадобится ужесточить права доступа к файлу author_keys: chmod 600

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...