ProxyCommand ของ ssh_config สามารถรันคำสั่งโลคัลก่อนเชื่อมต่อกับเครื่องรีโมตได้หรือไม่?


11

ก่อนที่ฉันจะสามารถเชื่อมต่อกับเครื่องระยะไกลโดยเฉพาะฉันต้องเรียกใช้คำสั่งท้องถิ่น ดังนั้นแทนที่จะssh me@remote.machineต้องทำ

local_command
ssh me@remote.machine

ฉันอยากจะทำสิ่งนี้โดยอัตโนมัติเพื่อที่ฉันจะได้ทำssh remote.machineเท่านั้น

ฉันรู้ว่าฉันสามารถทำสิ่งนี้ได้ในระดับเชลล์โดยการสร้างsshสคริปต์ของตัวเองที่เรียกใช้/usr/bin/sshแต่ฉันสามารถทำได้โดยใช้ตัวเลือกProxyCommandssh_configใช่หรือไม่

เท่าที่ฉันเข้าใจฉันต้องการบางสิ่งบางอย่าง

Host remote.machine
    ProxyCommand local_command; ssh me@remote.machine

ใน~/.ssh/configไฟล์ของฉันแต่ไม่ใช่อย่างแน่นอนเพราะมันเป็นวงกลม!

คำตอบ:


9

หากใช้ProxyCommandคุณต้องใช้สิ่งที่ต้องการ/usr/bin/ncเชื่อมต่อเซิร์ฟเวอร์

สำหรับการเรียกใช้คำสั่งของคุณก่อนเชื่อมต่อคุณจำเป็นต้องใช้sh -c "command list"เพื่อรวมสองคำสั่งเป็นหนึ่งเดียว

Host remote.machine
    ProxyCommand sh -c "local_command; /usr/bin/nc %h %p"

มากกว่า:

หากคุณlocal_commandซับซ้อนเกินไปคุณสามารถใช้สคริปต์:

cat my_connect.sh
#!/bin/bash

local_command
/usr/bin/nc "$1" "$2"

ssh config กลายเป็น:

Host remote.machine
        ProxyCommand /path_to_my_connect.sh %h %p

ในที่สุดคุณสามารถเพิ่มพร็อกซีของคุณเองไปที่ /usr/bin/nc


1

ใช้ตัวอย่างจากหน้าที่คุณลิงก์:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.1:8080 %h %p

เรียกใช้ nc (netcat) เพื่อเชื่อมต่อกับพร็อกซี (พร็อกซีที่รันบน 192.0.2.1:8080) และส่งผ่าน% h และ% p ไปยังคำสั่ง ssh (% h = ชื่อโฮสต์,% p = พอร์ต)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.