Я создал сценарий удара, которым иногда нужен я для ввода некоторой информации (другой пароль машины / имя пользователя), когда я выполняю его.
Существует ли способ предотвратить это путем ввода (жесткое кодирование) этой информации в код? Таким образом, когда я выполняю его, это будет работать гладко, не прося, чтобы я ввел что-либо.
Это - команда:
scp /home/machine1/backup/test.txt /home/machine2/backup
Вместо того, чтобы ввести machine2 пароль, я хочу трудно кодировать его в своем сценарии.
Не делайте 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
Ссылка с деталями, например, советы по устранению неисправностей,
Настроенный ssh доступ к Вашему серверу с rsa парой "открытый/закрытый ключ". Сохраните свой закрытый ключ загруженным в памяти. Затем Вы можете scp или ssh в сервер без пароля (помимо создания жизни, более легкая аутентификация файла ключей значительно более безопасна, чем аутентификация по паролю),
Вот то, как настроить ssh для аутентификации файла ключей: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys - 2
Использовать sshpass
. В Ubuntu можно установить его с sudo apt install sshpass
.
Этот общий синтаксис должен добиться цели:
sshpass -p<password> <source> <destination>
Но это не безопасно. Позвольте нам не помещенное удобство также далеко впереди основной безопасности. Любой другой пользователь в системе видит команды и аргументы, выполняемые другими пользователями. Защищать, против которого Вы можете иметь sshpass
читайте из переменной среды.
export SSHPASS=<password>
sshpass -e scp <source> <destination>
Я также рекомендовал бы работать unset SSHPASS
если чему-либо еще в Вашем сценарии не доверяют.