1

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

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 上的专家说需要这样做 =)

4

3 回答 3

3

类似于以下内容:

ssh -At jumpserver ssh -At server1

应该管用。确保在需要的-t地方分配了一个伪 tty(第二个可能不需要,但我目前没有可以测试它的设置,它不会受到伤害)。这还有一个好处是,当您退出时server1,两个会话都会消失......

于 2013-06-28T19:30:19.263 回答
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

于 2021-02-09T07:57:49.193 回答
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 上运行它希望如果您不想维护配置文件,这会有所帮助。

于 2021-04-23T08:48:03.050 回答