Tôi muốn cấu hình SSH của mình gọi ra một tập lệnh trong một số trường hợp nhất định để giải quyết một địa chỉ IP khác với những gì tôi cung cấp. Trong tình huống này, tôi thực sự không muốn ủy quyền qua một máy chủ khác, chỉ cần thay đổi máy chủ đang SSH thành (mặc dù trong một số trường hợp tôi sẽ muốn ủy quyền thông qua một máy chủ lưu trữ, do đó sẽ gộp phần này vào một tập lệnh).
Đây là một kịch bản khá dài và không thực sự được thiết kế để trở thành một kịch bản duy nhất trong ProxyCommand
chỉ thị.
Đây là một đoạn trích từ tập lệnh cho thấy sự cố:
#!/bin/bash
instance_id="$1"
người dùng="$2"
cổng = "$ 3"
nếu [[ $instance_id == *"i"* ]]; sau đó
filter="--instance-ids ${instance_id}"
khác
filter="--filters Name=ip-address,Value=${instance_id}"
fi
public_ip=$(aws ec2 description-instances $filter | jq -r '.Reservations[0].Instances[0].PublicIpAddress')
nếu [[ $public_ip == "null" ]]; sau đó
thật
khác
ssh $user@$public_ip -p $port
fi
Và đây là của tôi ~/.ssh/config
:
Máy chủ i-* mi-* 172.2* 172.3*
Người dùng cbell
ProxyCommand ~/.ssh/aws_iea_proxy_command.sh %h %r %p
Nếu tôi cố ssh tới một ID phiên bản, ví dụ: ssh i-030ee3dd4f2712b3b
, tập lệnh được kích hoạt nhưng tôi không được cung cấp trình bao tương tác.
[connor@Enigma:~/.ssh] 130 $ ssh i-030ee3dd4f2712b3b
Thiết bị đầu cuối giả sẽ không được phân bổ vì stdin không phải là thiết bị đầu cuối.
-bash: dòng 1: SSH-2.0-OpenSSH_8.2p1: không tìm thấy lệnh
Làm cách nào để lệnh SSH đang chạy trong tập lệnh thông qua ProxyCommand hoạt động?