นี่คือสิ่งที่ฉันได้ลองและฉันพบข้อผิดพลาด:
$ 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) จะเรียกใช้เชลล์บนรีโมตเซิร์ฟเวอร์โดยอัตโนมัติและส่งคำสั่งไปยังเชลล์เมื่อตรวจพบโทเค็นที่ถูกตีความโดยเชลล์เช่น; > >>ฯลฯ
opensshssh-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ตัวเลือกที่ช่วยให้เราสามารถระบุตำแหน่งที่เหมาะสมของชื่อกับไฟล์ที่มีคีย์สาธารณะ
บางครั้งมันอาจมีประโยชน์โดยเฉพาะอย่างยิ่งถ้าเราเก็บไว้ในตำแหน่งที่ไม่ได้มาตรฐานหรือเรามีกุญแจสาธารณะมากกว่าหนึ่งอันในคอมพิวเตอร์ของเราและเราต้องการชี้ไปที่รหัสที่เฉพาะเจาะจง