มีวิธีง่ายๆในการดึงข้อมูล IP HostNameจาก ssh config บนบรรทัดคำสั่งหรือไม่? หลายครั้งที่ฉันต้องใช้scpและต้องการเชื่อมต่อกับเครื่อง แต่ฉันจำได้เพียงชื่อโฮสต์
มีวิธีง่ายๆในการดึงข้อมูล IP HostNameจาก ssh config บนบรรทัดคำสั่งหรือไม่? หลายครั้งที่ฉันต้องใช้scpและต้องการเชื่อมต่อกับเครื่อง แต่ฉันจำได้เพียงชื่อโฮสต์
คำตอบ:
SCP จะอ่านของคุณและ~/.ssh/config /etc/ssh/ssh_configตราบใดที่คุณคัดลอกไปยัง / จากชื่อหนึ่งในชื่อแทนโฮสต์ในการกำหนดค่า ssh ของคุณก็ควรจะทำงาน
เนื่องจากดูเหมือนจะเป็นคำตอบสั้น ๆ ต่อไปนี้เป็นข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณสามารถทำได้ด้วย ssh config ...
นี่คือโพสต์ที่อธิบายคุณสมบัติขั้นสูงบางส่วนของไฟล์ ssh config: http://magazine.redhat.com/2007/11/27/advanced-ssh-configuration-and-tunneling-we-dont-need-no- เหม็น-VPN ซอฟแวร์ /
ต้องการช่องสัญญาณ ssh / scp ผ่านพร็อกซี http หรือไม่ ไม่มีปัญหาเพียงใช้ขั้นตอนที่อธิบายไว้ที่นี่: http://www.mtu.net/~engstrom/ssh-proxy.php
การใช้ตัวเลือก ProxyCommand อื่น: http://jasonmc.wordpress.com/2008/04/16/ssh-magic/
ต้องการแมจากhostการโต้แย้งได้รับในบรรทัดคำสั่งเพื่อ ssh_config hostnameรายการเป็นเรื่องง่ายโดยใช้sshตัวเอง
คุณสามารถขอให้ประเมินและพิมพ์สิ่งที่จะใช้สำหรับการกำหนดค่าสำหรับบรรทัดคำสั่งโดยไม่ต้องเชื่อมต่อจริง จากนั้นคุณเพียงแค่ต้องดึงสิ่งที่มันแสดงรายการไว้hostname(โปรดสังเกตว่ามันตั้งชื่อตามชื่อคีย์การกำหนดค่าโดยการแปลงเป็นตัวพิมพ์เล็ก) ตัวอย่างง่ายๆคือ:
ssh -G database | awk '/^hostname / { print $2 }'
หาก. ssh / config ประกอบด้วย:
Host database
Hostname database.example.com
database.example.comนี้จะพิมพ์ออกมา
หากต้องการ ping คุณสามารถประเมินผลลัพธ์และใช้เป็นอาร์กิวเมนต์:
ping $(ssh -G database | awk '/^hostname / { print $2 }')
ไม่จำเป็นต้องทำเช่นนั้นscpแต่คุณสามารถใช้การsshติดตามการดีบั๊ก
ssh -v HostName ' ' 2>&1 | grep '^debug1: Connecting to'
โดยปกติแล้วคุณสามารถทำได้host HostNameและคุณจะได้รับที่อยู่ IP
หากhostไม่ได้ติดตั้งไว้ (ควรเป็น) คุณสามารถใช้nslookup HostName 8.8.8.8ซึ่งจะใช้เซิร์ฟเวอร์ Google DNS เพื่อทำการค้นหา
ในการทำสิ่งเหล่านี้ตัวแก้ไขของเครื่องของคุณจะต้องมีการกำหนดค่าที่ถูกต้อง (ในไฟล์ /etc/resolv.conf และอาจ /etc/nsswitch.conf) หรือคุณต้องใช้ "ชื่อโดเมนแบบเต็ม" พร้อมโฮสต์ domaiin และ "TLD" (.org, .com, .net นั้นเป็นคำต่อท้าย)
~/.ssh/configซึ่งฉันเข้าใจว่าเป็นประเด็นของคำถามนี้
HostNameเป็นชื่อแทนโดยพลการไม่ใช่ชื่อโดเมน
ใช้ ProxyCommand ปลอม ...
$ ssh -o 'ProxyCommand echo %h>&2' mYaLiAs 2>&1 | fgrep -v ssh_exchange_id | read actual
$ echo $actual
192.168.1.234
.ssh/config/etc/ssh/ssh_configมีเหตุผลที่คุณไม่สามารถสแกนชื่อแทนที่กำหนดในการกำหนดค่าได้หรือไม่