如何通过控制台启动 sftp 传输

如何通过控制台启动 sftp 传输

我需要将 5 GB 的文件从一个远程主机移动到另一个远程主机,但这样无法通过控制台使用 scp 命令。因此,除了先将文件下载到本地计算机,然后再将其重新上传到最终服务器之外,我还在考虑其他任何选项。

目标服务器使用 sftp。是否可以通过 ssh 控制台向目标服务器启动 sftp“下载”?

如果是,那么命令方案是什么?

答案1

ssh 密钥意味着作为某些用户,比如 pixeline,当您登录到 serverC 时,当您输入

ssh serverA

它会直接连接您并要求输入密码。

如果有钥匙,那么这应该对你有用

#copy from serverA to serverB from serverC - you are logged to serverC
   ssh pixeline@serverA  'cat /path/to/filename | ssh pixeline@serverB "cat > /path/to/remotefilename " '

如果没有 ssh 公钥,它将无法正常工作 - 以下是如何一步步操作的: http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html

注意:您的主目录必须至少具有 755 的保护,并且主目录下的 .ssh 目录应为 700。在所有 3 台服务器上。

玩得开心...您必须让它工作起来,如果您想一次处理所有文件,我们可以尝试 tar。

答案2

如果所有服务器都是基于 Linux 或 Unix 的,您可能能够使用 rsync,因为这是完成它的最快方法。

答案3

如果远程服务器上有 sftp,则调用它的命令将是(请击鼓):

sftp

它的工作方式与几乎所有其他 CLI FTP 程序一样。解释所有可以使用它执行的操作对于超级用户来说有点太长了,因此只需阅读其手册页即可。

现在,将系统配置为禁止 scp 但允许 sftp 有点不寻常。并不是说不能这样配置,但大多数阻止其中一个的管理员也会阻止另一个。

如果您遇到这种情况,可以利用 ssh 允许通过任何可与 stdin 和 stdout 配合使用的存档或复制程序执行远程命令这一事实。例如:

tar -c <files or directories to archive> | ssh user@host tar -x

或者

dd if=file.to.transfer | ssh user@host dd of=destination.file

这样做之所以有效,是因为如果这些程序没有指定文件,它们会根据情况默认使用 stdin 或 stdout。因此,您可以创建一个存档或读取一个文件,并将结果转储到 stdout,然后将该 stdout 传输到 ssh 的 stdin,ssh 正在运行一个程序,将其转换回您想要的文件。

根据您的网络状况和文件特性,您可能需要使用 -C 调用这些命令的 sftp 或 ssh 部分来压缩流量,以免花费太长时间。

相关内容