ฉันกำลังสร้างสคริปต์สำรองขนาดเล็กโดยใช้sshfs
:
sshfs backup_user@target_ip:/home /mnt/backup
มีวิธีการรวมรหัสผ่านในคำสั่งนี้หรือไม่?
หรือมีโซลูชันการถ่ายโอนไฟล์อื่นที่สามารถใช้รหัสผ่านการเข้าสู่ระบบอื่นนอกเหนือจาก FTP / SFTP ได้หรือไม่
ฉันกำลังสร้างสคริปต์สำรองขนาดเล็กโดยใช้sshfs
:
sshfs backup_user@target_ip:/home /mnt/backup
มีวิธีการรวมรหัสผ่านในคำสั่งนี้หรือไม่?
หรือมีโซลูชันการถ่ายโอนไฟล์อื่นที่สามารถใช้รหัสผ่านการเข้าสู่ระบบอื่นนอกเหนือจาก FTP / SFTP ได้หรือไม่
คำตอบ:
-o password_stdin
ดูเหมือนว่าจะไม่ทำงานในทุกระบบเช่น freeBSD เป็นต้น
นอกจากนี้คุณยังสามารถใช้expect
ล่ามก็ควรทำงานกับ sshfs และควรทำเคล็ดลับ
อีกวิธีหนึ่งคือsshpass
สมมติว่าคุณกำลังสำรองข้อมูลไดเรกทอรี / var / www
สำรอง:
name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www
อัปโหลดไฟล์สำรองข้อมูลไปยังเซิร์ฟเวอร์สำรอง
sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name
ดังนั้นมันจะอัปโหลดไดเรกทอรีพร้อมการสำรองข้อมูลของวันนี้
แต่ก็ยังตามที่ได้กล่าวไว้สูงกว่าวิธีที่ดีที่สุด (ปลอดภัยและเรียบง่าย) คือการใช้คู่คีย์ ssh
ความไม่สะดวกเพียงอย่างเดียวคือคุณต้องผ่านกระบวนการสร้างคีย์ทุกครั้งบนเซิร์ฟเวอร์ คุณต้องจับคู่ แต่มันจะดีกว่าการเก็บรหัสผ่านในรูปแบบข้อความล้วนบนเซิร์ฟเวอร์ทั้งหมดที่คุณต้องการสำรองข้อมูล :) การ
สร้าง Key Pair ให้ถูกวิธี
บนเซิร์ฟเวอร์ท้องถิ่น
ssh-keygen -t rsa
บนเซิร์ฟเวอร์ระยะไกล
ssh root@remote_servers_ip "mkdir -p .ssh"
การอัปโหลดคีย์สาธารณะที่สร้างไปยังเซิร์ฟเวอร์ระยะไกล
cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
ตั้งค่าการอนุญาตบนเซิร์ฟเวอร์ระยะไกล
ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
เข้าสู่ระบบ
ssh root@remote_servers_ip
การเปิดใช้งาน SSH Protocol v2
ไม่ใส่ข้อคิดเห็น "Protocol 2" ใน / etc / ssh / sshd_config
เปิดใช้งานการอนุญาตคีย์สาธารณะใน sshd
uncomment "PubkeyAuthentication ใช่" ใน / etc / ssh / sshd_config
ถ้า StrictModes ถูกตั้งค่าเป็น yes ใน / etc / ssh / sshd_config
restorecon -Rv ~/.ssh
ตามคู่มือมีตัวเลือก-o password_stdin
ที่อาจอนุญาตให้อ่านรหัสผ่านจากอินพุตมาตรฐานซึ่งอาจเป็นการเปลี่ยนเส้นทาง ฉันไม่เคยใช้มันดังนั้นฉันจึงคาดเดา
ที่กล่าวว่าฉันขอแนะนำอย่างยิ่งต่อโซลูชั่นดังกล่าวซึ่งไม่ปลอดภัยโดยเนื้อแท้
ssh
ทำงานได้ดีมากกับระบบของคีย์ส่วนตัว / สาธารณะ มันง่ายและปลอดภัย ไม่จำเป็นต้องใส่รหัสผ่านหรือเขียนรหัสอย่างชัดเจนในเชลล์สคริปต์ เพียงแค่กดกุญแจสาธารณะของคุณบนเซิร์ฟเวอร์และคุณสามารถเชื่อมต่อได้ทันที
printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
-o password_stdin
ตัวเลือกใด ๆ
printf "my_password\n" | sshfs -o password_stdin user@hostname:/ $HOME/local_dir
PS ฉันใช้ Debian Buster PPS ใช้งานได้ แต่ขอรหัสผ่าน:sshfs -o password_stdin user@hostname:/ $HOME/local_dir
ไปป์"sshfs password"
ด้วย<<<
เพื่อ-o password_stdin
ทำงานกับ bash:
sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< "sshfs password"
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin
ตัวเลือก "-o password_stdin" คือสิ่งที่ช่วยให้คุณไพพ์รหัสผ่านของคุณ
ดังกล่าวว่าคีย์เป็นตัวเลือกที่ดีกว่าเว้นแต่ผู้ให้บริการของคุณจะไม่อนุญาตให้คุณใช้ sftp (นี่เป็นหนึ่งในความล้มเหลวที่น่าสังเกตของ WP Engine)
สคริปต์เมานต์:
#!/bin/bash
server=<host>
user=<username>
pass=<password>
root=<hostpath>
mount=$(pwd)/sshfs
type sshfs >/dev/null 2>&1 || { echo >&2 "sshfs required"; exit 1; }
type sshpass >/dev/null 2>&1 || { echo >&2 "sshpass required"; exit 1; }
mkdir -p $mount
SSHPASS="$pass" sshfs $server:$root $mount -o ssh_command="sshpass -e ssh -l $user"
ยกเลิกการเชื่อมต่อ:
#!/bin/bash
mount=$(pwd)/sshfs
fusermount -u $mount
สิ่งหนึ่งที่ต้องจำไว้คือถ้าคุณใช้-o password_stdin
ตัวเลือกมันอาจดูเหมือนจะไม่ทำงานเพราะ sshfs จะถามว่าจะเชื่อมต่อกับโฮสต์หรือไม่ (ถ้าเป็นครั้งแรกที่คุณเชื่อมต่อและไม่ได้เพิ่ม ไปยังไฟล์โฮสต์ที่รู้จัก) หากคุณใช้งานเป็นชุดคุณจะไม่เห็นคำสั่ง sshfs วิธีหลีกเลี่ยงปัญหานี้คือ:
-o StrictHostKeyChecking=no
ตัวเลือกเพื่อ sshfs หรือสคริปต์อัตโนมัติเพื่อเชื่อมต่อ sftp กับ sshfs
#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END