มีวิธีง่ายๆในการดึงข้อมูล 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
มีเหตุผลที่คุณไม่สามารถสแกนชื่อแทนที่กำหนดในการกำหนดค่าได้หรือไม่