作法:通过Jumphost进行scp,每个都有私钥

时间:2018-09-06 15:27:22

标签: ssh scp public-key ssh-tunnel

我想通过Jumphost到目标服务器使用scp命令。 Jumphost和targetserver都需要用于登录的密钥。

如果不需要密钥,我认为此命令将起作用:

scp -o ProxyJump=usernameJumpserver@ipJumpserver filename usernameTargetserver@ipTargetserver:/path/filename

因此,包括一个键,我进入了以下命令:

scp -i /pathOnMyClient/key -o ProxyJump=usernameJumpserver@ipJumpserver filename usernameTargetserver@ipTargetserver:/path/filename

然后我收到错误消息“ usernameTargetServer @ ipTargetserver:权限被拒绝(公钥)。”

我无法在其中添加(可能是?)必需的-i / pathJumpserver / key。如何运作?

4 个答案:

答案 0 :(得分:0)

我无法通过ProxyJump使用此功能,因此我转而使用更为冗长的ProxyCommand。这适用于我通过A从A复制到C:

scp -i <path on A to key for C> \
    -oProxyCommand="ssh -i <path on A to key for B> -W %h:%p <user>@B" \
    ${myFile} <user>@C:~/

答案 1 :(得分:0)

由于您无法在Jumphost上输入ssh密钥的密码,因此建议您将密钥加载到本地ssh-agent中,然后使用以下方法之一:

> scp -o ProxyJump=user@jump.host localfile user@target.host:

> scp -o ProxyJump=user@jump.host user@target.host:file localdir

这对我有用!

HTH 斯蒂芬·K。

答案 2 :(得分:0)

windows 的高级 ssh,一点都不好玩。
我发现这行得通。
创建一个 C:\Users\u.username\.ssh\config 文件,例如:

Host jumphost.server
  HostName jumphost.server
  User u.username
  ForwardAgent yes
  IdentityFile C:\Users\u.username\.ssh\id_rsa
 
Host * !jumphost.server
  ProxyCommand ssh.exe u.username@jumphost.server -W %h:%p
  IdentityFile C:\Users\u.username\.ssh\id_rsa

(替换 jumphost.server 的数据,以及用户名和 ssh 私钥的路径)

然后来自最终 target.server 的 scp 就是这样工作的(来自 powershell):

scp -F .\.ssh\config u.username@target.server:/path/to/file C:\Users\u.username\

或从本地 Windows 到目标 linux:

scp -F .\.ssh\config C:\Users\u.username\file u.username@target.server:/path/to/file 

标志 -F 正在加载预定义的配置。

答案 3 :(得分:0)

所以我们有:

  • 本地主机
  • 跳转主机
  • 目标主机

在本地主机上,在 ~/.ssh/config 添加:

Host JumpHost
    User JumpHostUser
    IdentityFile ~/.ssh/id_rsa
    # other optional settings:
    # Port 2222
    # HostName 192.168.0.1    
Host DestinationHost
    User DestinationHostUser
    IdentityFile ~/.ssh/id_rsa_jumphost

你可以使用@StefanKaerst 的建议:

scp -o ProxyJump=JumpHost DestinationHost:/file /LocalFile
scp -o ProxyJump=JumpHost /Localile DestinationHost:/File

我把它别名为

scpj='scp -o ProxyJump=JumpHost'

所以我只输入:

scpj DestinationHost:/file /LocalFile

不过,您需要准备好所有键,包括从本地到跳转、从跳转到目的地以及从本地到目的地。