2015-11-02 13 views
9

Tôi đang viết tệp cấu hình SSH và muốn thực hiện một chút logic. Ví dụ:Tập tin ~/.ssh/config có sử dụng các biến không?

Host myhost1 
    ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p 

Có thể đạt được các biến sử dụng (bash?) Ở trên không? Cảm ơn!

Trả lời

3

Trong ~/.ssh/config bạn không thể có nhiều logic và không có Bash. Tài liệu hướng dẫn cho tập tin này nằm trong man ssh_config, và nó không đề cập đến tính năng như vậy.

Việc bạn có thể làm là tạo tập lệnh sẽ có logic bạn cần và làm cho bạn cấu hình ssh gọi tập lệnh đó. cái gì đó dọc theo dòng:

ProxyCommand sudo /root/bin/ssh-randomly.sh [bastion_host1] [bastion_host2] 

Và viết một kịch bản Bash /root/bin/ssh-randomly.sh để nhận hai tham số hostname, chọn một trong số họ một cách ngẫu nhiên, và chạy thật ssh lệnh với các thông số thích hợp.

4

Không; .ssh/config không được xử lý bởi bất kỳ chương trình bên ngoài nào. Bạn sẽ cần một hàm vỏ dọc theo các dòng của

ssh() { 
    (($RANDOM % 2)) && bastion=bastion_host1 || bastion=bastion_host2 

    command ssh -A "$bastion" "[email protected]" 
} 
7

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.

+0

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? –

+1

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

+0

@BobRisky: Thêm tùy chọn nhúng tập lệnh vào một dòng ProxyCommand. :) – ghoti

Các vấn đề liên quan