【问题标题】:SSH - a way to transfer files without opening a separate SFTP session?SSH - 一种无需打开单独的 SFTP 会话即可传输文件的方法?
【发布时间】:2010-10-01 05:31:20
【问题描述】:

不是真正的编程问题,但与许多程序员相关......

假设我打开了与另一台计算机的 SSH 会话。

远程:html avalys$ ls
欢迎.msg index.html readme.txt
远程:html avalys$

是否有任何命令可以在我的远程 shell 中键入,它会立即将当前目录中的一个文件(例如welcome.msg)传输到我的本地计算机,即

remote:html avalys$ stransfer welcome.msg
获取 /home/avalys/html/welcome.msg 到 welcome.msg
/home/avalys/html/welcome.msg 100% 23KB 23.3KB/s 00:00
远程:html avalys$

我知道的唯一方法是在 SSH 会话中打开一个并行 SFTP 会话和 CD 到我的当前目录,远程管理服务器时这是一个真正的 PITA。

编辑:我知道使用反向 sftp/scp 连接的可能性,但这涉及更多的输入。如果我可以只输入某个命令的名称(例如“stransfer”)和我想要传输的文件,然后让它正常工作,那就太好了。

【问题讨论】:

  • 我明白了,您正在寻找类似于 Fido 时代的旧 sz 命令的东西。伙计,这让我回来了。
  • 如果您只是想避免键入 scp 的第二个参数,您只是在询问别名。

标签: shell ftp ssh sftp openssh


【解决方案1】:

在学校,如果我将文件从一个 linux 系统传输到另一个,我通常使用 ssh 远程,然后使用 scp 将文件从远程系统传输回我的计算机。不确定这是否是您正在寻找的内容,或者这是否适用于您的情况,但这通常是我不得不打开另一个终端窗口的方式。

澄清一下,如果您不熟悉 scp,您仍然需要指定要将文件放在计算机上的位置,但无论如何对我来说,这通常比文件的位置更容易记住在远程计算机上。这是一个可能有用的链接:http://www.computerhope.com/unix/scp.htm

【讨论】:

    【解决方案2】:

    你可以设置这样一个反向传输连接w/

    ssh -Rport:127.0.0.1:22 user@host
    

    scp返回。

    使用scp user@host:port 访问它。

    【讨论】:

    • 好主意。在涉及的每台机器上维护一个 .ssh/config 文件将节省您更多的打字时间。
    【解决方案3】:

    如果您正在修补东西(恕我直言不应该修补),请查看ssh-xfer

    【讨论】:

      【解决方案4】:

      你可以编写一个名为 stransfer 的 bash 脚本,它接受一个文件名参数,然后它会在 scp 命令中插入文件名,假设服务器和服务器上文件的路径没有改变。

      或者,如果文件始终相同,您可以在 ~/.bashrc 文件中创建一个别名。

      别名 getwelcome='scp avalys@remotehost:/home/avalys/html/welcome.msg.'

      【讨论】:

        【解决方案5】:

        我的想法与 Paul Tomblin 在对该问题的评论中所写的想法相同。旧的终端会话使用 x-、y- 和 z-modem 协议和工具(szrz 用于 z-modem 变体)来实现类似的功能。我不确定这些是否可以在 ssh 会话中使用,但可能值得一试。

        Fink 在 Mac OS X 上为这些工具提供了一个 lrzsz 包。

        将其设为社区 wiki,因为在 Paul 先到那里后我会因为获得代表而感到难过...

        【讨论】:

          【解决方案6】:

          这是我对这个问题的首选解决方案 [正如我在 duplicate question 上提出的那样]。在创建 ssh 会话时设置反向 ssh 隧道。这通过两个 bash 函数变得容易:grabfrom() 需要在本地主机上定义,而 grab() 应该在远程主机上定义。您可以添加您认为合适的任何其他 ssh 变量(例如 -X 或 -Y)。

          function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
          function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };
          

          用法:

          localhost% grabfrom remoteuser@remotehost
          password: <remote password goes here>
          remotehost% grab somefile1 somefile2 *.txt
          password: <local password goes here>
          

          正面:

          • 它在任何一台主机上都可以在 OpenSSH 之外运行,无需特殊软件
          • 当本地主机位于 NAT 路由器后面时它可以工作
          • 可以实现成一对两个单行bash函数

          否定:

          • 它使用固定端口号,因此:
            • 不适用于与远程主机的多个连接
            • 可能与在远程主机上使用该端口的进程发生冲突
          • 它需要 localhost 接受 ssh 连接
          • 在启动会话时需要一个特殊命令
          • 它不会隐式处理对 localhost 的身份验证
          • 不允许在本地主机上指定目标目录
          • 如果您从多个 localhost 抓取到同一个远程主机,ssh 不会喜欢更改密钥

          未来的工作: 这仍然很笨拙。显然,可以通过适当地设置 ssh 密钥来处理身份验证问题,并且通过向 grab() 添加参数来允许指定远程目录更加容易

          更困难的是解决其他负面因素。选择一个动态端口会很好,但据我所知,没有优雅的方法可以将该端口传递给远程主机上的 shell;据我所知,OpenSSH 不允许您在远程主机上设置任意环境变量,而 bash 不能从命令行参数中获取环境变量。即使您可以选择一个动态端口,也无法确保在没有先连接的情况下不会在远程主机上使用它。

          【讨论】:

            【解决方案7】:

            在研究这个问题时,我发现了一个可以替代 openssh 客户端 zssh 的程序。

            sudo apt-get install zssh
            zssh user@remote
            sudo apt-get install zssh
            sz file.name
            <ctrl>+<space>
            rz
            

            像魅力一样工作。

            【讨论】:

            • 哇,很棒的选择!注意:在 Mac 上,您还可以执行“sudo port install lrzsz”,而不是 Ctrl-Space(这是 Spotlight 的默认快捷方式),您可以按 Ctrl-Shift-2 (^@)
            • 我试过时根本没用——得到“sz: command not found”。
            • 它就像一个魅力。我用 lrzsz 代替。 sz &lt;filename&gt;发送文件到远程主机,rz在windows中接收选择的文件(或将文件拖到XShell终端发送文件到远程主机)。它真的救了我的命。
            【解决方案8】:

            您可以使用 sshfs 挂载 ssh 连接。这样您就可以在同一个 ssh 连接中传输文件,同时使用您最喜欢的任何 ssh 客户端。如果您愿意,您甚至可以将其设置为自动挂载。

            【讨论】:

              【解决方案9】:

              https://superuser.com/questions/259481/reverse-scp-over-ssh-connection

              sftp server
              get file.txt
              

              显然,您还可以在 sftp 控制台中浏览 n 个内容,get 采用完整的文件路径。复制到您运行 sftp 的目录。

              【讨论】:

                猜你喜欢
                • 2018-02-11
                • 2014-09-29
                • 2022-01-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多