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

时间:2013-06-28 19:23:53

标签: bash ssh proxy dmz

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

bash$ ssh -A jumphost
jumphost$ ssh server1

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

ForwardAgent yes
Host server1
ProxyCommand ssh -q jumphost nc <ip of server1> 22

访问它们。我如何在我的脚本中执行此操作,以便ssh不会在ssh -A jumphost停止/终止?

我试图运行

ssh jumphost nc <ip of server1> 22 "ls /tmp"

ssh jumphost nc <ip of server1> 22

ssh -A jumphost nc <ip> 22

但它抱怨协议不匹配。我不控制跳转主机,因此我不能将脚本/程序放在一个公共场所供人们使用。我也不认为IT会让我们专门使用它。

我有办法通过跳转主机运行脚本吗?在此先感谢您的帮助。如果没有办法,我只会告诉IT他们需要允许我将我的脚本复制到跳转主机b / c stackoverflow上的专家说它需要完成=)

3 个答案:

答案 0 :(得分:3)

有些事情:

ssh -At jumpserver ssh -At server1

应该有效。 -t确保在需要的地方分配伪tty(在第二个时可能没有必要,但是我没有设置我现在可以测试的那个,而且它不会伤害)。这也有一个好处,当你从server1退出时,两个会话都会消失......

答案 1 :(得分:1)

更新~/.ssh/config文件如下,

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

答案 2 :(得分:1)

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

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。

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

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 也可以这样使用:

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 上运行 如果您不想维护配置文件,希望这会有所帮助。