Назад | Перейти на главную страницу

Несколько сеансов SSH в одной команде

Я пытаюсь скопировать базу данных с одного сервера на другой. Я попытался использовать следующую команду, и она завязывается при вводе паролей 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