Как может я избегать необходимости вводить пароль для команды scp жестким кодированием пароль в мой сценарий?

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

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

Это - команда:

scp /home/machine1/backup/test.txt /home/machine2/backup

Вместо того, чтобы ввести machine2 пароль, я хочу трудно кодировать его в своем сценарии.

6
задан 21 December 2018 в 07:15

3 ответа

Аутентификация ключа SSH удобна и безопасна

Не делайте hardcode пароль в сценарий оболочки, потому что для других людей легко считать его.

  • Вход в систему с ключевой аутентификацией к ssh то, в чем Вы нуждаетесь.

    Таким образом, Вам не нужен никакой пароль, и это более безопасно также. Это особенно важно, если компьютер видим в Интернете. Если Вы не думаете, что это важно, попытайтесь регистрировать попытки входа в систему, которые Вы получаете в течение следующей недели.

    • Выполнение

      ssh-keygen
      

      Вам, вероятно, предложат для защиты ключа с паролем.

    • Не делайте этого (нажмите Enter для продолжения без пароля, когда ssh-keygen спрашивает), потому что Вы не хотите вводить любой пароль или пароль, когда Вы запускаете скрипт и прибываете в scp командная строка.

      Без ключевой аутентификации и с паролями в виде открытого текста, очень важно иметь строгие полномочия на сценарии оболочки, и это - хорошая идея также для связанных с безопасностью сценариев оболочки без пароля открытого текста. Полномочия по умолчанию для файла сценария (при создании где-нибудь в корневом каталоге), вероятно, 644

      $ ls -l shellscript 
      -rw-r--r-- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      и можно дать файлы сценария, выполняют полномочия для всех, 755

      $ chmod 755 shellscript
      $ ls -l shellscript 
      -rwxr-xr-x 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

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

      $ chmod 600 shellscript 
      $ ls -l shellscript
      -rw------- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      и Вы не можете выполнить его непосредственно с ./shellscript, так использование

      bash shellscript       # when shellscript in the current directory
      bash path-to-shellscript/shellscript  # from other directories
      
    • Сделайте это (введите пароль когда ssh-keygen спрашивает), если Вы хотите повышение уровня защиты, потому что Ваш закрытый ключ будет защищен (зашифрованный с паролем), но затем необходимо ввести пароль, когда Вы запускаете скрипт с scp.

    • Необходимо скопировать файл ключей, например, с

      ssh-copy-id <username>@<host>
      
    • scp использование ssh для передачи данных. Таким образом, когда ключи существуют, это должно работать без пароля.


  • Каждая машина Linux может быть сделана ssh сервер путем установки openssh-server, в Ubuntu с apt,

    sudo apt update
    sudo apt install openssh-server
    

13
ответ дан 23 November 2019 в 07:21

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

Вот то, как настроить ssh для аутентификации файла ключей: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys - 2

1
ответ дан 23 November 2019 в 07:21

Использовать sshpass. В Ubuntu можно установить его с sudo apt install sshpass.

Этот общий синтаксис должен добиться цели:

sshpass -p<password> <source> <destination>

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

export SSHPASS=<password>
sshpass -e scp <source> <destination>

Я также рекомендовал бы работать unset SSHPASS если чему-либо еще в Вашем сценарии не доверяют.

0
ответ дан 23 November 2019 в 07:21

Другие вопросы по тегам:

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