我经常遇到这样的情况:我必须为远程主机做大量的跳转操作,只是因为我的客户端和远程主机之间没有直接的路由。 当我需要将远程主机上的文件复制两次或更多次时,我总是必须:
client$ ssh host1 host1$ ssh host2 host2$ scp host3:/myfile . host2$ exit host1$ scp host2:myfile . host1$ exit client$ scp host1:myfile .
当uucp仍然被使用时,这将会像a一样简单
uucp host1!host2!host3 /myfile .
我知道有squid的uucp,但不幸的是我没有在这些机器上设置适当的权限。 另外,我不确定我是否真的想摆弄客户的机器。
有没有人知道一个方法做这个任务,而不需要build立大量的隧道或部署新的软件到远程主机? 也许某种recursion脚本克隆自己到所有的远程主机,为我做的辛苦工作?
假设使用公钥进行身份validation,并且所有主机都执行SSH代理转发。
编辑:我没有find一种方法来自动转发我的交互sesssion到下一跳主机。 我想要一个解决scheme,使用scp通过多跳来复制文件bangpath风格,而不需要在任何这些机器上安装uucp。 我没有(合法)权利或对ssh-config进行永久更改的权限。 此外,我分享这个用户名,并与其他许多人共同主持。 我愿意破解我自己的脚本,但我想知道是否有人知道已经做了什么。 bangpath上主机的最小侵入性改变,从客户端简单地调用。
编辑2:为了给你一个在交互式会话中如何正确完成的印象,请看一下GXPC群集 。 这基本上是一个Python脚本,它将自己传递到所有具有连接性的远程主机,以及您的ssh密钥的安装位置。 关于它的好处是,你可以告诉“我可以通过HostA通过HostB到达HostC”。 它只是工作。 我想为SCP做这个 。
即使你明确提到这不是你正在寻找的东西,我会坚持要你这样做,因为在你到达目的地的path上的每个主机上设置一个脚本是比较复杂和耗时的。
如果您在主机笔记本电脑上,并且希望将某些内容复制到托pipenetworking服务器,但只能通过companygatweay.org访问networking服务器,则只需执行以下操作:
laptop$ ssh -L4444 companygateway.org:webserevr:22
这将直接通过端口22上的networking服务器打开本地机器上的端口4444。
用scp复制到web服务器看起来像这样:
laptop$ scp -P 4444 /some/files/here localhost:/to/some/files/on/webserver
从networking服务器复制:
laptop$ scp -P 4444 localhost:/tmp/remote/files /home/localusername/downloads
ssh host1 ssh host2 ssh host3 cat /myfile > myfile ? 🙂
UPD。 (2014-01-20) :最近我碰到man dbclient ,里面提到:«…
-B endhost:endport – “Netcat-like”模式,其中Dropbear将连接到给定主机,然后创build一个转发连接到terminal主机。 这将作为dbclient的标准input/输出呈现。
Dropbear也将允许指定多个“跳”,用逗号分隔。 在这种情况下,将连接到第一个主机,然后TCP转发连接将通过它到第二个主机,依此类推。 除最终目的地之外的主机将不会看到encryption的SSHstream以外的任何内容。 主机端口可以用斜线指定(例如matt @ martello / 44)。 此语法也可以用于scp或rsync(将dbclient指定为ssh / rsh命令)。 一个文件可以通过多个SSH跳“跳”,例如
scp -S dbclient matt@martello,root@wrt,canyons:/tmp/dump .请注意,上面的例子中,主机名由前一跳parsing(所以“峡谷”将由主机“wrt”parsing),与其他-L TCP转发的主机相同。 主机密钥根据给定的主机名在本地检查。