ฉันต้องการให้การกำหนดค่า SSH เรียกสคริปต์ในบางสถานการณ์เพื่อแก้ไขที่อยู่ IP ที่แตกต่างจากที่ฉันให้ไว้ ในสถานการณ์นี้ ฉันไม่ต้องการมอบฉันทะผ่านโฮสต์อื่น เพียงแค่เปลี่ยนโฮสต์ที่เป็น SSH เป็น (แม้ว่าในบางสถานการณ์ จะ เช่นการมอบฉันทะผ่านโฮสต์จึงรวมเป็นสคริปต์เดียว)
นี่เป็นสคริปต์ที่ค่อนข้างยาวและไม่ได้ออกแบบมาเพื่อเป็นซับใน ProxyCommand
คำสั่ง
นี่คือสารสกัดจากสคริปต์ที่แสดงปัญหา:
#!/bin/bash
instance_id="$1"
ผู้ใช้ = "$2"
พอร์ต = "$ 3"
ถ้า [[ $instance_id == *"i"* ]]; แล้ว
filter="--instance-ids ${instance_id}"
อื่น
filter="--filters Name=ip-address,Value=${instance_id}"
ไฟ
public_ip=$(aws ec2 อธิบายอินสแตนซ์ $filter | jq -r '.Reservations[0].Instances[0].PublicIpAddress')
ถ้า [[ $public_ip == "null" ]]; แล้ว
จริง
อื่น
ssh $user@$public_ip -p $พอร์ต
ไฟ
และนี่คือของฉัน ~/.ssh/config
:
โฮสต์ i-* mi-* 172.2* 172.3*
กระดิ่งของผู้ใช้
ProxyCommand ~/.ssh/aws_iea_proxy_command.sh %h %r %p
หากฉันพยายาม ssh เป็นรหัสอินสแตนซ์ เช่น ssh i-030ee3dd4f2712b3b
สคริปต์ถูกเรียกใช้ แต่ฉันไม่ได้รับเชลล์แบบโต้ตอบ
[คอนเนอร์@ปริศนา:~/.ssh] 130 $ ssh i-030ee3dd4f2712b3b
Pseudo-terminal จะไม่ถูกจัดสรร เนื่องจาก stdin ไม่ใช่เทอร์มินัล
-bash: บรรทัดที่ 1: SSH-2.0-OpenSSH_8.2p1: ไม่พบคำสั่ง
ฉันจะทำให้คำสั่ง SSH ทำงานในสคริปต์ผ่าน ProxyCommand ได้อย่างไร