单个命令中的多个 SSH 会话

单个命令中的多个 SSH 会话

我正在尝试将数据库从一台服务器复制到另一台服务器。我尝试使用以下命令,但它在输入 ssh 密码时被卡住了。如果我输入一台服务器的密码,它会抱怨另一台服务器的密码,反之亦然。

ssh root@server1 mysqldump --databases db | ssh root@server2 mysql

我设法通过将转储暂时保存在我的计算机上来完成传输,只是想知道是否有办法让它工作。

答案1

使用 ssh-keygen,将生成的 .ssh/ 文件复制到另一台服务器,将内容附加到 ./.ssh/authorized_keys 文件中,然后您就可以无需任何密码通过 ssh 进入另一台服务器。

答案2

使用密钥认证绝对是一种有效的方法,也是我可能会采用的方法。如果出于某种原因您无法这样做,则可以在中间机器上放置命名管道,而不是将文件存储在那里。

mkfifo relaypipe
ssh root@server1 mysqldump --databases db > relaypipe #auth & send to background
ssh root@server2 mysql < relaypipe

答案3

如果由于某种原因您不能使用密钥验证并且需要输入两个密码才能完成此操作,则可以使用 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

相关内容