SCP файл между двумя серверами

535
NullHypothesis

У меня есть дроплет Digital Ocean (SERVER A), который использует SSH-ключ и пароль для моей учетной записи root. Я создал дополнительного пользователя и добавил его в новую группу SFTPUsers, следуя этому руководству:

https://www.digitalocean.com/community/questions/how-do-i-restrict-a-user-to-a-specific-directory

У меня также есть другой сервер на общем хосте (не на Digital Ocean), который имеет ночные файлы резервных копий. (СЕРВЕР B)

Я хотел бы безопасно каждую ночь защищенно копировать эти ночные резервные копии с сервера SERVER B в каталог на моем сервере DO (сервер A), к которому у моего пользователя резервного копирования есть доступ, и хотел бы сделать это с помощью сценария, чтобы он не запрашивал пароль, чтобы он мог просто работать. Я действительно не понимаю, куда идти отсюда. Я нахожу, что чем больше я исследую, тем больше путаюсь. Я генерирую открытый / закрытый ключ на сервере SERVER B, а затем копирую открытый ключ на сервер A? Тогда что происходит?

Куда мне идти отсюда, чтобы получить возможность SCP-файла с одного моего сервера на цифровой океанский сервер? Я хотел бы сделать это, используя моего нового пользователя, которого я создал. Был бы очень рад любой помощи / указатели в правильном направлении. Я пытался читать по SSH / публичным / приватным ключам, но все еще не чувствую, что у меня прогресс :(

Спасибо!

0

1 ответ на вопрос

0
sneep

Нужно ли создавать другой ключ SSH для этого пользователя? Я хотел бы сделать это на сервере DO? Я даже не могу войти как новый пользователь, потому что он говорит, что доступ запрещен (открытый ключ), когда я пытаюсь войти. Однако я могу войти в систему как пользователь root, когда использую этот ключ.

Конечно, вы можете использовать один и тот же ключ для всего. Однако было бы лучше использовать разные ключи для разных пользователей. Поэтому я бы порекомендовал создать ключ для не-пользователя root. (И, возможно, не вводите ssh-agentключевую фразу, иначе вам придется понять (см. Ниже).) Вы должны сгенерировать ключ на сервере DO, а затем добавить открытый ключ ... см. Следующий шаг.

Как я могу гарантировать, что дроплет разрешит доступ с этого другого сервера? Я прочитал, что вы можете скопировать открытый ключ, созданный на сервере DO, в .ssh dir общего сервера, а затем добавить его к авторизованному ключу. Это верно?

Вам не нужно копировать его в ~/.sshкаталог. Вы просто должны добавить его authorized_keysв ~/.sshкаталог.

Даже если ключ будет скопирован, у него все равно будет пароль, который мне нужно будет ввести, не так ли? Куда это сохраняется? Переменная окружения?

Только если вы ввели парольную фразу, когда генерировали свой ключ. Вы можете хранить парольные фразы, используя ssh-agent. Запуск ssh-agentзапустит фоновый процесс, который позаботится о заполнении ключевой фразы, когда вы ssh(или scpт. Д.) Перейдете на другой сервер, но только для ключей, которые вы ssh-addредактировали. Это также выведет несколько строк, как это:

$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-mjHm7nFyhJSh/agent.21838; export SSH_AUTH_SOCK; SSH_AGENT_PID=21839; export SSH_AGENT_PID; echo Agent pid 21839; 

Это команды оболочки. Если вы вставите их в свою оболочку, вы сможете использовать их ssh-agentв этой оболочке. Вы также можете сделать это eval $(ssh-agent)для автоматической оценки ssh-agentвывода оболочки. Затем вы делаете ssh-add(для .ssh/id_rsaключа по умолчанию или ssh-add path/to/keyи вводите ключевую фразу один раз. В этом терминале вы теперь сможете подключаться к sshдругим серверам без ввода ключевой фразы, даже если вы сгенерировали свой ключ с помощью ключевой фразы.

Большое спасибо, что нашли время ответить. Если я хочу сгенерировать ключ для пользователя без полномочий root, мне просто нужно войти в систему под именем этого пользователя и создать ключ? Теперь, если я сгенерирую ключ на DO BOX (A), помните, что моей целью является копирование файлов из B в A с использованием резервного пользователя, которого я создал на сервере A. Чтобы сделать это, я должен скопировать открытый ключ для моего пользователя с сервера А на сервер Б и добавить его к авторизованным ключам? После этого сработает ли моя команда SCP? По сути, серверу B нужен открытый ключ, а серверу A нужен закрытый ключ, верно? NullHypothesis 6 лет назад 0
Правильный. Кстати, открытый ключ полностью состоит из обычных печатаемых символов, так что вы можете просто скопировать и вставить его в `~ / .ssh / authorized_keys` на другом сервере. sneep 6 лет назад 0
Хочу ли я дать этому пользователю домашний каталог? Это обычный пользователь? Я хочу ограничить их, поэтому даже если кто-то скомпрометирует сервер B, он не сможет причинить много вреда NullHypothesis 6 лет назад 0
Да, обычный пользователь. Вы не могли бы ничего поместить в `~ / .ssh / authorized_keys`, если бы не было домашнего каталога. Вы можете войти с A на B, но не с B на A, так что не о чем беспокоиться. sneep 6 лет назад 0
но чтобы подтвердить, копирование открытого ключа A в B позволяет мне запускать SCP из B и копировать файл в A? NullHypothesis 6 лет назад 0
Нет, вы запустите `scp` из A. Подумайте` scp B: / path / to / remote / source / file / path / to / local / destination / file` sneep 6 лет назад 0