我需要编写一个脚本,以便能够在我们的安全的场外实验室中的测试服务器上运行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上的专家说它需要完成=)
答案 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 上运行 如果您不想维护配置文件,希望这会有所帮助。