scp 使用 ssh 隧道

scp 使用 ssh 隧道

通常,我会这样做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 . 

相关内容