다음을 사용하여 작은 백업 스크립트를 만들고 있습니다 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 키 쌍을 사용하는 것입니다
. 유일한 불편은 모든 서버에서 키 생성 프로세스를 한 번 수행해야한다는 것입니다 페어링해야하지만 백업하려는 모든 서버에서 암호를 일반 텍스트 형식으로 유지하는 것이 좋습니다. :),
올바른 방법으로 키 페어 생성
로컬 서버에서
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 프로토콜 v2 활성화
/ etc / ssh / sshd_config에서 "프로토콜 2"주석 해제
sshd에서 공개 키 인증 활성화
/ etc / ssh / sshd_config에서 "PubkeyAuthentication yes"주석 해제
/ etc / ssh / sshd_config에서 StrictModes가 yes로 설정되어 있으면
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 나는 데비안 버스터 PPS에있다. 이것은 작동하지만, 암호를 요구한다 :sshfs -o password_stdin user@hostname:/ $HOME/local_dir
bash 에서 작동 하도록 "sshfs password"
with <<<
를 파이프 -o password_stdin
:
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