我想通过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。如何运作?
答案 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
不过,您需要准备好所有键,包括从本地到跳转、从跳转到目的地以及从本地到目的地。