นี่คือสิ่งที่ฉันได้ลองและฉันพบข้อผิดพลาด:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
นี่คือสิ่งที่ฉันได้ลองและฉันพบข้อผิดพลาด:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
คำตอบ:
OpenSSH มาพร้อมกับคำสั่งเพื่อทำสิ่งนี้, ssh-copy-id
. คุณเพียงแค่ให้ที่อยู่ระยะไกลและมันจะเพิ่มกุญแจสาธารณะของคุณไปยังauthorized_keys
ไฟล์บนเครื่องระยะไกล:
$ ssh-copy-id tim@just.some.other.server
คุณอาจต้องใช้การ-i
ตั้งค่าสถานะเพื่อค้นหากุญแจสาธารณะของคุณบนเครื่องท้องถิ่นของคุณ:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>
ถูกจัดการโดยเชลล์ของคุณและคุณกำลังเรียกใช้คำสั่งผ่าน SSH แทนการใช้เชลล์ การแก้ไขให้ SSH เรียกใช้เชลล์ซึ่งจะรันคำสั่งของคุณควรจะทำงาน
ssh-copy-id
จะไม่ทำงานใช่ไหม
คุณสามารถทำสิ่งนี้ได้เสมอ:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
ฉันไม่แน่ใจว่าคุณสามารถcat
จากเครื่องท้องถิ่นไปยังเซสชัน ssh เพียงแค่ย้ายไปที่ / tmp ตามที่แนะนำ
แก้ไข: ตรงนี้เป็นสิ่งที่ssh-copy-id
ไม่ เหมือนกับที่ไมเคิลพูด
cat
หรืออย่างอื่น) สิ่งที่คุณอธิบายเป็นวิธีที่ล้าสมัย; ssh-copy-id
ขอแนะนำเนื่องจากมีความเสี่ยงน้อยกว่าการพิมพ์ผิดหรือให้สิทธิ์ไฟล์ผิด
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
:
คำตอบนี้อธิบายวิธีทำให้วิธีที่ต้องการในคำถามทำงานได้
คุณสามารถดำเนินการเชลล์บนคอมพิวเตอร์ระยะไกลเพื่อตีความความหมายพิเศษของ>>
โอเปอเรเตอร์การเปลี่ยนเส้นทาง:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
ผู้ประกอบการเปลี่ยนเส้นทาง >>
ปกติแล้วจะถูกตีความโดยเชลล์
เมื่อคุณดำเนินการssh host 'command >> file'
แล้วจะไม่รับประกันว่าcommand >> file
จะถูกตีความโดยเชลล์ ในกรณีของคุณcommand >> file
จะถูกดำเนินการแทนเชลล์โดยไม่มีการตีความพิเศษและ>>
ถูกกำหนดให้กับคำสั่งเป็นอาร์กิวเมนต์ - เช่นเดียวกับที่ทำงานcommand '>>' file
ในเชลล์
SSH บางเวอร์ชัน (OpenSSH_5.9) จะเรียกใช้เชลล์บนรีโมตเซิร์ฟเวอร์โดยอัตโนมัติและส่งคำสั่งไปยังเชลล์เมื่อตรวจพบโทเค็นที่ถูกตีความโดยเชลล์เช่น;
>
>>
ฯลฯ
openssh
ssh-copy-id
ไม่ให้ ลำดับจะเป็น:
สร้างคีย์ 4k ที่เหมาะสม
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
เริ่มต้น ssh-agent ของคุณและดูดข้อมูลเช่นSSH_AGENT_PID
ฯลฯ
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
ตอนนี้เริ่มโหลดกุญแจเข้าสู่ตัวแทน SSH ของคุณ
ssh-add ~/.ssh/id_rsa4k
ตรวจสอบว่ามีการโหลด
ssh-add -l
ssh-add -L
นี่จะแสดงสิ่งที่คุณมีใน ssh-agent
ตอนนี้ SSH จริงกับระบบระยะไกล
ssh username@remotehost.network
ตอนนี้คุณสามารถรัน ssh-copy-id โดยไม่มีอาร์กิวเมนต์:
ssh-copy-id
สิ่งนี้สร้าง~/.ssh/authorized_keys
และเติมข้อมูลพื้นฐานที่จำเป็นจาก ssh-agent
ฉันมีปัญหากับ ssh-copy-id เมื่อเลือกพอร์ตอื่นมากกว่า 22 ... ดังนั้นนี่คือ oneliner ของฉันที่มี ssh-port อื่น (เช่น 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
แท้จริงthe ssh-copy-id
คำสั่งไม่ตรงนี้ (จากopenssh-client
แพคเกจ):
ssh-copy-id user@host
หมายเหตุ: host
หมายถึงที่อยู่ IPหรือโดเมน
ฉันต้องการเพิ่มข้อมูลเพิ่มเติมให้กับสิ่งนี้
1) เราสามารถระบุพอร์ตอื่นสำหรับ SSH บนเซิร์ฟเวอร์ปลายทาง:
ssh-copy-id "-p 8127 user@host"
หมายเหตุ: พอร์ตจะต้องอยู่ในด้านหน้าของหรือมันจะไม่แก้ไขuser@host
2) เราสามารถระบุไฟล์ด้วยพับลิกคีย์ :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
หมายเหตุ:-i
ตัวเลือกที่ช่วยให้เราสามารถระบุตำแหน่งที่เหมาะสมของชื่อกับไฟล์ที่มีคีย์สาธารณะ
บางครั้งมันอาจมีประโยชน์โดยเฉพาะอย่างยิ่งถ้าเราเก็บไว้ในตำแหน่งที่ไม่ได้มาตรฐานหรือเรามีกุญแจสาธารณะมากกว่าหนึ่งอันในคอมพิวเตอร์ของเราและเราต้องการชี้ไปที่รหัสที่เฉพาะเจาะจง