Answers:
我知道这是一个较晚的答案,但我只是发现了一种很酷的方法。这基本上是Holger Just的答案,但是在保存的配置文件中:
您需要将此~/.ssh/config
文件放在local.machine上的文件中(如果不存在则创建文件)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null
保存文件后,您可以使用
ssh target.machine
您想随时连接。Scp也将起作用,因为它也尊重ssh配置文件。如果您使用的是GNOME并想使用GUI,那么Nautilus也会如此。
Host proxy.machine
同一~/.ssh/config
文件中的行,那将有所帮助; 2)提及是否可以嵌套这些命令(即,客户端连接到代理主机1,而代理主机1连接到代理主机2,代理主机2连接到该主机)。 ..target)和3)是什么nc %h %p
意思
现在,您可以*单线执行此操作,而无需 nc
任何地方:
scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .
说明
pcreds
并tcreds
代表你的代理,如果需要的目标凭据(username
,username:password
,等)。
这是有可能的,因为它具有类似netcat的内置功能,从而消除了nc
对中间主机的要求。使用ssh -W host:port
设置到指定主机和端口的隧道,并将其连接到stdin / stdout,然后scp
在该隧道上运行。
该%h
和%p
在ProxyCommand
被替换为您指定的目标主机和端口。
为了更加方便,您可以在ssh配置中配置代理:
Host target.machine
ProxyCommand ssh pcreds@proxy.machine -W %h:%p
然后从那开始
scp tcreds@target.machine:file .
* 自OpenSSH 5.4- 2010年3月发布
-p <portnum>
之前的-W
任一方法来指定代理服务器的端口
一线?不能离开我的头顶。您需要先建立一个代理,而不能单独使用scp来实现。
手动进行操作时,我为隧道打开了一个屏幕会话:
screen -S tunnel
屏幕用于将隧道保持在背景外壳中。使用任何您想使隧道在后台保持打开状态的技术(@weeheavy的答案可能是最简单的)。在屏幕会话中,我像这样开始隧道
ssh -L 2222:target.machine:22 [user@]proxy.machine
为了解决这个问题,基本上是说:“在我的本地计算机上,打开端口2222,并且通过proxy.machine将连接到localhost:2222的任何连接代理到target.machine:22”。
建立ssh连接和隧道后,请使用“ Ca d”从屏幕会话中分离。要返回该屏幕会话,请输入screen -raAd tunnel
回到原始外壳后,scp命令将如下所示:
scp -P 2222 localhost:your/file/on/target.machine local/path
请记住,本地主机端口2222实际上只是通向target.machine的隧道。
似乎scp像ssh一样支持“ -o”选项,尽管我不确定如何通过它传递代理用户名/密码:
scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path
如果您nc: invalid option -- X
看到https://stackoverflow.com/a/23616021/32453
怎么样:
scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" your.filename username@yourdestination.yourdomain.com:/whatever_location
另一种简单的解决方案来传输SOURCE_FILE从source_host到destination_host经由proxy_host使用:
登录proxy_server:
ssh login@proxy_host
在代理服务器上,将source_file从source_host传输到destination_host(您可以将其键入为一行,省略\
,或两行,如下所示):
scp login@source_host:/path_to_source_file \
login@destination_host:/path_to_destination_directory
这要求从source_host到proxy_host的登录使用rsa_key。
我关注了这篇文章,找到了一个对我有用的答案。(因为上面的答案对我不起作用)。
如何scp
通过中间主机(也称为跳转主机)来归档文件
http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.html
我的答案如下:
scp -oProxyCommand="ssh -W %h:%p {username}@{proxy_IP}" \
{source_file} {remote_username}@{remote_IP}:{remote_file_path}
例:
scp -oProxyCommand="ssh -W %h:%p ubuntu@10.60.10.145" \
archive.gz wise@35.xxx.xxx.xxx:/home/wise/archive.gz
我希望这个答案可以对您有所帮助。