如果我通过SSH登录到系统,是否可以将文件复制回本地系统,而无需启动另一个终端或屏幕会话并执行scp或类似操作,也可以不将SSH从远程系统返回到本地系统本地系统?
如果我通过SSH登录到系统,是否可以将文件复制回本地系统,而无需启动另一个终端或屏幕会话并执行scp或类似操作,也可以不将SSH从远程系统返回到本地系统本地系统?
Answers:
如果您事先计划,这是最简单的。
第一次打开主连接。对于后续连接,请通过现有的主连接路由从属连接。在您的中~/.ssh/config
,将连接共享设置为自动进行:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
如果启动与现有连接相同的ssh会话(用户,端口,计算机),则第二个会话将在第一个会话上建立隧道。建立第二个连接不需要新的身份验证,并且速度非常快。
因此,在建立活动连接的同时,您可以快速:
scp
或复制文件rsync
;在现有连接上,可以建立反向ssh隧道。在ssh命令行上,通过传递-R 22042:localhost:22
22042是一个随机选择的数字来创建远程转发,该数字不同于远程计算机上的任何其他端口号。然后ssh -p 22042 localhost
在远程计算机上将您连接回源计算机。您可以scp -P 22042 foo localhost:
用来复制文件。
您可以使用进一步自动化RemoteForward 22042 localhost:22
。这样做的问题是,如果您使用ssh的多个实例连接到同一台计算机,或者如果其他人正在使用该端口,则不会获得转发。
如果尚未从头开始启用远程转发,则可以在现有的ssh会话上进行。输入Enter ~C
Enter -R 22042:localhost:22
Enter。有关更多信息,请参见手册中的“转义符”。
服务器故障线程中也有一些有趣的信息。
如果文件很小,则可以将其键入并从终端输出中复制粘贴。如果文件包含不可打印的字符,请使用诸如base64之类的编码。
remote.example.net $ base64 <myfile (复制输出)
local.example.net $ base64 -d> myfile (粘贴剪贴板内容) Ctrl +D
更方便的是,如果您启用了X转发,则将文件复制到远程计算机上并将其粘贴到本地。您可以通过管道将数据输入xclip
或输出xsel
。如果要保留文件名和元数据,请复制粘贴存档。
remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -
另一种(IMO)简便方法是:
# to remote host
cat localfile.conf | ssh user@hostname 'cat -> /tmp/remotefile.conf'
# from remote host
ssh user@hostname 'cat /tmp/remotefile.conf' > /tmp/localfile.conf
或者,如果您喜欢类似GUI的东西,请尝试Midnight Commander。他们称此功能为Shell-Link。大多数发行版的软件包系统中都包含em mc
。
mc
是最快使用的。
tgz
文件:)
SSH通过转义字符(~
默认)确实支持一些命令:
$ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
$ ~C
ssh> help
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KR[bind_address:]port Cancel remote forward
!args Execute local command
在!args
似乎最接近是你想要的。请注意,您需要PermitLocalCommand
在/etc/ssh_config
文件中启用才能使~C
命令起作用(请参阅参考资料man ssh_config
)。
如果你设置了一个可以重新使用相同的SSH会话ControlMaster
在ssh_config
。如果您这样做:
$ ~C
ssh> !scp file user@myserver:
从技术上讲,您从未离开过ssh会话,并且不需要重新进行身份验证。可能比您想要的复杂,但我想不出另一种简单的方法。
!args
在帮助消息中找不到。
args
不在第一条帮助消息(~?
)中,而是在第二条中(一旦输入出现ssh>
提示~C
,可以help
在ssh>
提示符下键入)
-R
,对于远程到本地)或前进(-L
,对于本地到远程)端口,以运行文件传输,前提是您在另一端监听了某些文件传输守护程序。但是,IMO并不需要这些。SSH协议在单个连接上支持多个通道,而OpenSSH客户端支持多路复用。假设你有ControlMaster
和ControlPath
设置(ControlPersist
同样是有用的)
#第一次连接 $ ssh远程 #将在原始ssh打开的同一连接上多路复用 $ sftp远程
甚至更简单的方法:打开Filezilla(或您最喜欢的ftp浏览器),打开到同一站点的ssh连接,找到文件并将其拖到本地文件结构中。如果您不熟悉Filezilla,请在下次使用“站点管理器”功能快速重新连接。
是的,我知道这对你们大多数人来说都是显而易见的(并非准确地说是对的),但是发现该线程在寻找仅终端解决方案的线程的某些人(像我一样)可能已经忽略了这一点。
ssh://SERVER
。
我发现最好和最有效的解决方案是使用xclip-copyfile
和xclip-pastefile
。
在服务器上,您用于xclip-copyfile
复制一个或多个文件。然后,这些文件在本地服务器上可用。在那里,您可以使用xclip-pastefile
。
这样就无需使用scp
或拥有本地ssh服务器。例如,我将其与cygwin一起使用。唯一的问题是,xclip
如果您还没有安装,则需要进行安装。哦,这也适用于二进制文件。
尽管使用实用的开源软件,但我们使用SecureCRT的众多原因之一是文件传输的便捷性。在F / OSS世界中根本没有直接替代品。
SecureCRT始于1990年代中期,最初是纯Windows程序,但几年前已移植到Mac OS X和Linux 。
SecureCRT具有三项主要功能,可用于将文件与SSH传输到系统中或从中传输文件:
ZModem,YModem,XModem,Kermit和ASCII -SecureCRT是一种老式的终端仿真器,支持几种带内文件传输协议。
最容易使用的是ZModem。在sz file-to-download
远程命令行上键入类似内容时,远程sz
程序会写出转义序列,告诉SecureCRT立即开始下载file-to-download
到默认下载目录。
一个不错的感觉是,每个会话的下载目录都是可自定义的。我们使用它在主办公室文件服务器上具有按站点的目录,因此我们不必手动对下载的文件进行排序。
(sz
是“ send ZModem”程序,lrzsz
它是软件包的一部分。它已经被大多数Unixy系统打包。如果由于某种原因您的远程系统尚未安装它,并且您不容易安装二进制软件包,源代码包体积小且高度可移植。我不得不不止一次地将lrzsz
“ sharchive”或uuencode
“ d tarball ”发送到精简的远程系统,以便可以将ZModem文件发送给它。)
SFTP -SecureCRT具有紧密集成的基本SFTP实现。
所谓“紧密集成”,是指当您提供SFTP菜单命令或键盘快捷键时,它会打开一个新选项卡,该选项卡通过相同的SSH连接连接到远程站点。因此,您无需重新登录,并且建立连接的速度比打开到同一服务器的单独SFTP连接的速度要快一些。
我将SFTP功能描述为“基本”功能,因为VanDyke软件具有单独的文件传输产品SecureFX。它比内置的SFTP客户端功能更强大,并且还与SecureCRT集成。
SecureCRT的SFTP功能使您可以配置与ZModem配置分开的默认远程目录和本地目录。
该SFTP功能具有基本的命令行界面,sftp
类似于OpenSSH的程序,但它具有诸如Tab命令完成之类的功能。因此,检索称为的远程文件somefile.tar.gz
可能很容易get so
TabEnter。
拖放 -如果将文件拖放到终端窗口中,它将自动rz
为您键入并开始发送文件。
或者,您可以打开SFTP选项卡并将文件拖放到该选项卡上以通过SFTP发送文件。因此,将文件发送到远程系统可能就像Alt-P,drag和drop一样简单。
我们发现通过SFTP进行传输的速度要快得多,这可能是因为它是基于TCP的协议,因此它得益于现代TCP / IP堆栈的大滑动窗口。ZModem是在将64 kiB块大小视为“大”的时代设计的。因此,当两端等待块传输确认时,ZModem中会吸收链接中的许多潜在速度。
关于拖放操作模式的一件好事是,它消除了使用ZModem带来的压力之一。rz
在远程系统上键入内容时,SecureCRT会自动弹出一个文件选择器。在远端超时之前,您大约有一分钟的时间来查找和选择文件。这会产生不愉快的比赛气氛。拖放使您可以在闲暇时找到文件,然后通过快速单击鼠标就可以开始传输。
我们仍然使用手动方法,以显式rz
命令开始传输。这是因为SecureCRT允许您配置每个会话的上载目录,该目录指向文件服务器上的文件夹,该文件夹始终包含特定远程站点正在运行的软件的最新版本。对于此类传输,没有时间争用,因为文件选择器在正确的位置开始。
scp file.foo user@myclient.com:file.foo
:P