【问题标题】:How to: scp over Jumphost, each with privatekeys如何:scp over Jump Host,每个都有私钥
【发布时间】:2019-02-11 22:05:24
【问题描述】:

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

如果不需要密钥,我认为这个命令会起作用:

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: Permission denied (publickey).”

我无法向其中添加(可能?)所需的 -i /pathJumpserver/key。它是如何工作的?

【问题讨论】:

    标签: ssh scp public-key ssh-tunnel


    【解决方案1】:

    由于您无法在 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】:

      我无法使用 ProxyJump 进行此操作,因此我转而使用更冗长的 ProxyCommand。这适用于通过 B 从 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" \
          /path/to/my/file <user>@C:~/
      

      【讨论】:

      • 已经删除了${myFile} 周围的${},然后它就起作用了。谢谢!
      • 对,那是用来表示你用文件路径设置的变量。
      【解决方案3】:

      所以我们有:

      • 本地主机
      • JumpHost
      • 目标主机

      在 LocalHost 上,在 ~/.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
      

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

      【讨论】:

      • 您也可以在 DestinationHost 部分的~/.ssh/config 文件中添加:ProxyCommand ssh -qW %h:%p JumpHostUser@JumpHost,然后您就不需要别名了。只需运行scp DestinationHost:/file /LocalFile。如果需要,您还可以添加端口转发:LocalForward 8080 localhost:8080
      【解决方案4】:

      来自 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 私钥路径)

      然后来自 final 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 正在加载预定义的配置。

      【讨论】:

        【解决方案5】:

        这对我有用:

        scp -o ProxyJump=USER_NAME@35.1.2.3 local-File.txt 10.1.2.3:~/
        

        【讨论】:

          猜你喜欢
          • 2011-04-03
          • 1970-01-01
          • 1970-01-01
          • 2017-11-29
          • 2011-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-05
          相关资源
          最近更新 更多