Я пытаюсь скопировать базу данных с одного сервера на другой. Я попытался использовать следующую команду, и она завязывается при вводе паролей ssh. Если я ввожу пароль одного сервера, он жалуется на другой, и наоборот.
ssh root@server1 mysqldump --databases db | ssh root@server2 mysql
Мне удалось выполнить перенос, временно удерживая дампы на моем компьютере, просто задаваясь вопросом, есть ли способ заставить это работать.
Используйте ssh-keygen, скопируйте сгенерированный файл .ssh / на другой сервер, добавьте содержимое в файл ./.ssh/authorized_keys, затем вы сможете использовать ssh на другом сервере без пароля.
Если по какой-то причине вы не можете использовать аутентификацию по ключу и для этого требуется ввести два пароля, вы можете использовать FIFO:
mkfifo myfifo
# In terminal session one, or a screen window, etc.
ssh root@server2 mysql < myfifo
# In terminal session two:
ssh root@server1 mysqldump --databases db > myfifo
Использование аутентификации с помощью ключа, безусловно, является правильным способом решения этой проблемы, и я бы, вероятно, сделал это. Если по какой-то причине вы не можете этого сделать, вы можете поместить именованный канал на промежуточный компьютер вместо того, чтобы хранить там файл.
mkfifo relaypipe
ssh root@server1 mysqldump --databases db > relaypipe #auth & send to background
ssh root@server2 mysql < relaypipe