首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在脚本中使用jumphost/jump服务器

问如何在脚本中使用jumphost/jump服务器
EN

Stack Overflow用户
提问于 2013-06-29 03:23:53
回答 3查看 6.7K关注 0票数 1

我需要编写一个脚本,以便能够在我们安全的异地实验室的测试服务器上运行cmds。问题是这些测试服务器位于跳跃服务器/跳跃主机的后面。我可以手动键入:

代码语言:javascript
复制
bash$ ssh -A jumphost
jumphost$ ssh server1

或者我编辑了我的个人.ssh/config文件以使用跳转主机

代码语言:javascript
复制
ForwardAgent yes
Host server1
ProxyCommand ssh -q jumphost nc <ip of server1> 22

才能访问它们。如何在脚本中执行此操作,以使ssh不会在ssh -A跳转时停止/终止?

我试着逃走

代码语言:javascript
复制
ssh jumphost nc <ip of server1> 22 "ls /tmp"

或

代码语言:javascript
复制
ssh jumphost nc <ip of server1> 22

或

代码语言:javascript
复制
ssh -A jumphost nc <ip> 22

但它抱怨协议不匹配。我不能控制跳转主机,所以我不能把脚本/程序放在一个公共的地方供人们使用。我也不认为它会成为一个专门供我们使用的跳转主机。

有没有办法让我通过一个跳转主机运行脚本?提前感谢您的帮助。如果没有办法,我会告诉IT他们需要允许我将脚本复制到跳转主机b/c堆栈溢出方面的专家说需要这样做=)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-29 03:30:19

大致是这样的:

代码语言:javascript
复制
ssh -At jumpserver ssh -At server1

应该行得通。-t确保在需要的地方分配一个伪tty(在第二个上可能没有必要,但我现在没有一个可以测试它的设置,它不会有什么坏处)。这也有一个好处,当您退出server1时,两个会话都会消失……

票数 3
EN

Stack Overflow用户

发布于 2021-02-09 15:57:49

按如下方式更新~/.ssh/config文件:

代码语言:javascript
复制
Host JumpHost
    Hostname 111.255.223.108
    User jump-user
    IdentityFile ~/Keys/JumpHost.pem
    AddKeysToAgent yes

Host PrivateHost
    Hostname 120.010.111.166
    IdentityFile ~/Keys/my-private-key.pem
    User private-user
    AddKeysToAgent yes
    ProxyJump JumpHost

然后在命令行上使用ssh,即ssh PrivateHost

票数 1
EN

Stack Overflow用户

发布于 2021-04-23 16:48:03

没有配置文件,有不同的端口,不同的key,不同的用户:跳转主机端口: 2244,目标主机端口: 2266 (端口只是例子)。如果使用标准端口(22),则可以省略-p/-P选项。

代码语言:javascript
复制
OUTPUT=$(ssh -o ProxyCommand="ssh -W %h:%p $JUMPHOST_USER@$JUMPHOST_IP -p 2244 -i jumphost_key_file" -oStrictHostKeyChecking=accept-new $TARGETHOST_USER@$TARGETHOST_IP -p 2266 -i targethost_key_file 'command')
echo $OUTPUT

-oStrictHostKeyChecking选项用于自动接受ECDSA密钥。如果这对您来说是一个安全问题,您应该删除此选项,但第一次需要手动确认。另外,别忘了在sshd_config的跳转主机上允许代理转发。在sshd_config中跳转主机上也可能需要允许TCPForwarding,可能在/etc/sysctl.conf中需要取消注释/启用net.ipv4.ip_forward = 1。

如果要在目标主机上运行本地脚本:

代码语言:javascript
复制
OUTPUT=$(ssh -o ProxyCommand="ssh -W %h:%p $JUMPHOST_USER@$JUMPHOST_IP -p 2244 -i jumphost_key_file" $TARGETHOST_USER@$TARGETHOST_IP -p 2266 -i targethost_key_file 'bash -c' <local_bash_script.sh)
echo $OUTPUT

scp也可以像这样使用:

代码语言:javascript
复制
scp -o ProxyCommand="ssh -W %h:%p $JUMPHOST_USER@$JUMPHOST_IP -p 2244 -i jumphost_key_file" -i targethost_key_file -P 2266 local_file_to_copy.txt $TARGETHOST_USER@$TARGETHOST_IP:/tmp/new_file_name.txt

注意在scp命令中端口的大写P,而不是在ssh中!如果不想更改文件名,则省略new_file_name.txt。我已经在debian 10上运行了这个程序,如果你不想维护配置文件,我希望这会对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17372177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档