多个SSH会话在一个单一的命令

我试图将数据库从一台服务器复制到另一台服务器。 我尝试使用下面的命令,并inputssh密码。 如果我input一个服务器的密码,它会抱怨另一个,反之亦然。

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

我设法通过在我的计算机上临时保存转储来执行转移,只是想知道是否有办法让这个工作。

使用ssh-keygen,将生成的.ssh /文件复制到其他服务器,将内容追加到./.ssh/authorized_keys文件中,然后就可以在没有任何密码的情况下ssh进入其他服务器。

使用密钥authentication绝对是一个有效的方法去做,我可能会做。 如果由于某种原因你不能这样做,你可以在中间机器上放一个命名pipe道,而不是在那里存储文件。

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

如果出于某种原因,您不能使用密钥authentication,并要求input两个密码来完成此操作,则可以使用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