不是一个编程问题,但与许多程序员有关......
假设我已经打开了与另一台计算机的SSH会话。
remote:html avalys $ ls
welcome.msg index.html readme.txt
remote: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
remote:html avalys $
我知道这样做的唯一方法是在SSH会话中打开并行SFTP会话和CD到我当前的目录,这是远程管理服务器时真正的PITA。
编辑:我知道使用反向sftp / scp连接的可能性,但这涉及更多的输入。如果我只能键入一些命令的名称(例如“stransfer”)和我想要转移的文件,并且让它正常工作,那就太好了。
答案 0 :(得分:7)
您可以使用ssh -Rport:127.0.0.1:22 user@host for scp back.
Use scp user@host:port
设置此类反向传输连接来访问它。
答案 1 :(得分:5)
在研究这个时,我找到了一个程序,它可以作为openssh客户端的替代品,zssh。
sudo apt-get install zssh
zssh user@remote
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz
像魅力一样。
答案 2 :(得分:2)
这是我对这个问题的首选解决方案[正如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>
肯定:
否定:
未来的工作: 这仍然是非常kludgy。显然,可以通过适当地设置ssh键来处理身份验证问题,通过向grab()
添加参数来更容易地允许指定远程目录。更难以解决其他负面因素。选择一个动态端口会很不错,但据我所知,没有优雅的方法可以将该端口传递给远程主机上的shell;据我所知,OpenSSH不允许您在远程主机上设置任意环境变量,而bash不能从命令行参数中获取环境变量。即使您可以选择动态端口,也无法确保在未连接的情况下不在远程主机上使用它。
答案 3 :(得分:2)
您可以使用sshfs挂载ssh连接。这样你就可以在同一个ssh连接中传输文件,同时使用你最喜欢的任何ssh客户端。如果愿意,您甚至可以将其设置为自动挂载。
答案 4 :(得分:1)
如果您正在修补内容(不应修补恕我直言),请查看ssh-xfer
答案 5 :(得分:1)
您可以编写一个名为stransfer的bash脚本,该脚本将采用文件名参数,然后它将插入scp命令中的文件名,假设服务器和服务器上文件的路径不会更改。
或者如果文件始终相同,您可以在〜/ .bashrc文件中创建别名。
alias getwelcome ='scp avalys @ remotehost:/home/avalys/html/welcome.msg。'
答案 6 :(得分:1)
我有同样的想法,保罗·汤姆林在评论中写道。旧的终端会话曾经使用x,y和z调制解调器协议和工具(sz
和rz
用于z-modem变体)来实现这样的功能。我不确定这些是否适用于ssh会话,但它可能值得一试。
Fink在Mac OS X上提供了lrzsz
这些工具包。
将此作为一个社区维基,因为在保罗首先到达那里之后,我会感到难以获得代表......
答案 7 :(得分:0)
在学校,如果我将文件从一个Linux系统转移到另一个系统,我通常使用ssh进行远程操作,然后使用scp将文件从远程系统传输回我的计算机。不确定这是否是您正在寻找的,或者在您的情况下是否适用,但这通常是我必须打开另一个终端窗口的方式。
只是为了澄清你是否不熟悉scp,你仍然需要指定你想把文件放在你的计算机上的位置,但对我而言,这通常比文件的位置更容易记住在远程计算机上。以下链接可能会有所帮助:http://www.computerhope.com/unix/scp.htm
答案 8 :(得分:0)
https://superuser.com/questions/259481/reverse-scp-over-ssh-connection
sftp server
get file.txt
显然,你也可以在sftp控制台中浏览n个东西,get
采用完整的文件路径。复制到您运行sftp
的目录。