通常,我会这样做scp file myuser@server1:~/
(并输入我的密码),但现在我需要首先scp file myuser@server2:~/
从ssh myuser@server2
我进入 server2,然后从 server2 执行scp file myuser@server1:~/
我尝试这样做ssh -L 8888:server1:22 myuer@server2
,它询问我密码,就像我这样做时一样ssh myuser@server2
,它只连接到 server2,但没有连接到 server1。
我怎样才能让它工作,以便我可以scp
直接从我到server1?
答案1
您可以非常简单地配置ProxyCommand
/,ProxyJump
这样您就可以scp
直接连接到远程服务器。~/.ssh/config
使用以下内容创建一个:
Host server1
ProxyCommand ssh -W %h:%p server2
然后你就可以直接 scp 了:
scp local.file server1:/path/to/remote.file
如果您确实坚持端口转发,那么在使用您提供的第一个命令创建“隧道”后:
ssh -L 8888:server1:22 server2
您需要以这种方式传输数据(其中-P
表示设置转发连接的端口):
scp -P 8888 local.file server1:/path/to/remote.file
答案2
scp
支持远程源文件和远程目标文件。它使用 ssh 进行数据传输,因此这应该相当于您尝试隧道传输:
scp file myuser@server2:~/
scp myuser@server2:~/file myuser@server1:~/
顺便说一句,如果myuser
用户名与本地登录名相同,则可以省略:
scp file server2:~/
scp server2:~/file server1:~/
如果您确实想要一个隧道(因此文件永远不需要接触server2
文件系统),那么这里可以很好地回答:https://superuser.com/questions/276533/scp-files-via-intermediate-host
事实上,这可能被认为已经得到了回答......
答案3
我发现这非常方便:
scp -J myuser@server2 file myuser@server1:~/
另外,如果您的笔记本电脑和每台服务器之间的用户名保持相同,则可以简单地省略用户名。如果您愿意,您还可以将 server2 放入主机文件 (/etc/hosts) 中,并使用一个好听且简短的名称,以便更快地键入:
# in file /etc/hosts
74.125.71.113 s2 # this is server2
那么传输到server1的命令file
是:
scp -J s2 file server1:~/
答案4
将以下内容放入主机服务器的 ~/.ssh/config 中
XAuthLocation /opt/X11/bin/xauth
Host remote
User foo
Hostname remote-server
ProxyCommand ssh foo@gateway-server -W remote-server:22
然后 scp 作为
scp remote:~/file_to_be_copied .