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

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

远程:html avalys$ ls
welcome.msg index.html readme.txt
远程:html avals$

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

远程:html avalys$ stransferwelcome.msg
正在将 /home/avalys/html/welcome.msg 获取到welcome.msg
/home/avalys/html/welcome.msg 100% 23KB 23.3KB/秒 00:00
远程:html avals$

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

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

有帮助吗?

解决方案

您可以设置这样的反相传送连接瓦特/ ssh -Rport:127.0.0.1:22 user@host for scp back.

Use scp user@host:port来访问它。

其他提示

在研究此我发现了一个程序,它可以作为一个下拉更换为OpenSSH客户端,zssh。

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

就像一个魅力。

这是我对这个问题的首选解决方案[如上给出的 重复的问题 我问]。创建 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 连接
  • 启动会话时需要特殊命令
  • 它不会隐式处理对本地主机的身份验证
  • 它不允许在本地主机上指定目标目录
  • 如果您从多个本地主机抓取到同一个远程主机,ssh 不会喜欢密钥更改

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

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

可以安装,带sshfs的SSH连接。这样,你可以同时使用任何SSH客户端,你最喜欢的相同ssh连接内传输文件。你甚至可以将它设置,如果你想挂载。

如果你到修补的东西(恕我直言,这不应该打补丁),看一看的 SSH-XFER

您可以写一个bash脚本名为stransfer,将采取一个文件名参数,那么它会在插话scp命令的文件名,假设服务器和路径上的文件服务器不会改变。

或者,如果该文件是始终不变的,你可以在你的〜/ .bashrc文件中创建一个别名。

别名getwelcome = 'SCP avalys @远程主机:。/home/avalys/html/welcome.msg'

我有这样的保罗汤布林中问题的评论中写道同样的想法。以前用的x,y旧终端会话,以及Z调制解调器协议和工具(szrz为Z调制解调器的变体)来实现这样的事情。我不知道,如果这些工作将在一个SSH会话,但它可能是值得一试。

芬克供给lrzsz包与Mac OS X上这些工具。

这使其成为社区的wiki,因为我会心疼获得代表,保罗最先到达那里......

在学校里,如果我从一个Linux系统传输文件到另一个,我通常远程使用ssh,然后使用scp将文件从远程系统传送回我的电脑。不知道这是你正在寻找,或者说甚至是适合你的情况,但通常是我让周围不必打开另一个终端窗口的方式。

什么

只是为了澄清,如果你不熟悉SCP,你仍然要指定的位置,你想放的文件在您的计算机上,但对我来说反正这通常是要记住比文件的位置更容易的事在远程计算机上。下面是可能会有所帮助的链接: http://www.computerhope.com/unix/scp热媒

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

sftp server
get file.txt

显然,你也可以浏览周围ñ东西在SFTP控制台,get需要一个完整的文件路径。副本从中运行sftp目录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top