Proxycommand của bạn có thể là tập lệnh shell.
host myhost1
ProxyCommand $HOME/bin/selecthost %h %p
Và sau đó trong ~/bin/selecthost
:
#!/usr/bin/env bash
hosts=(bastion1 bastion2)
onehost=${hosts[$RANDOM % ${#hosts[@]}]}
ssh -x -a -q ${2:+-W $1:$2} $onehost
chưa được kiểm tra. Milage của bạn có thể khác nhau. Có thể chứa các loại hạt.
Cập nhật:
mỗi ý kiến, tôi đã thử nghiệm sau đây, và nó cũng hoạt động độc đáo:
host myhost1 myhost2
ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}'
Dĩ nhiên, phương pháp này không cho phép bạn chỉ định một cổng tùy chỉnh cho mỗi máy chủ, mà bạn có thể thêm vào logic của một tập lệnh shell riêng biệt nếu được yêu cầu cho nhiều máy chủ trong cùng một mục nhập host
trong cấu hình ssh của bạn.
Tuyệt vời, cảm ơn! Có lý do gì để tôi không chỉ làm 'ssh -A $ onehost $ {2: + - W $ 1: $ 2}' dưới dạng bản sao trực tiếp hơn của Proxycommand hiện tại? –
Trong kịch bản này, biến '$ onehost' được thiết lập bằng cách chọn một phần tử mảng ngẫu nhiên từ một mảng bash. ProxyCommand của bạn được thực thi bởi shell của bạn, miễn là shell của bạn bị bash, tôi không hiểu tại sao bạn không thể bao gồm toàn bộ chức năng của tập lệnh này trên một dòng, mặc dù tôi chưa thử nó. Tôi trả lời theo cách này bởi vì tôi không biết rằng bạn đang sử dụng bash làm shell mặc định của bạn. (Trên hệ thống của tôi, tôi sử dụng bash để lập trình, nhưng tcsh là trình bao mặc định của tôi.) – ghoti
@BobRisky: Thêm tùy chọn nhúng tập lệnh vào một dòng ProxyCommand. :) – ghoti