Приветствую Я создаю скрипт для автоматизации отправки открытых ключей, но я не могу отправить свой файл или переменную через ssh ни с помощью "echo, ни с помощью cat"
решение1
Если вы хотите отправить файл на удаленный сервер, вы можете использовать scp
.
Из man scp:
scp копирует файлы между хостами в сети. Он использует ssh(1) для передачи данных, использует ту же аутентификацию и обеспечивает ту же безопасность, что и ssh(1). В отличие от rcp(1), scp запросит пароли или парольные фразы, если они необходимы для аутентификации.
Основное использование:
scp user@origin:/path/to/file user@target:/path/to/file
Предположим, вы хотите перенести example.txt из текущего каталога на удаленный каталог SERVER
с тем же именем в папке example, выполнив аутентификацию как root:
scp example.txt root@SERVER:/example/example.txt
решение2
Для передачи открытых ключей на удаленные сервера существует специальная утилитаssh-копия-id.
Выше вы найдете скрипт, который можно использовать для автоматизации этой задачи:
#!/bin/sh
while read server ; do
timeout 10 ssh-copy-id -i <public_key_path> <user>@$server
done < <list_of_servers.txt>
PS: Замените константы между <> своими собственными значениями.
решение3
Вы можете использовать sshpass
в своем скрипте доступ к серверу без ввода пароля каждый раз, например:
sshpass -p 'PASSWORD' ssh USER@SERVER ssh-copy-id USER@SERVER
также вы можете использовать -f
для записи пароля в файл, если вы не хотите писать его в командной строке (он в открытом виде в обоих случаях) для списка серверов, называемого servers.list
for SERVER in $(cat servers.list)
do
sshpass -p 'PASSWORD' ssh USER@$SERVER ssh-copy-id USER@$SERVER
done