sshfs를 사용한 명령 행의 사용자 이름 및 비밀번호


15

다음을 사용하여 작은 백업 스크립트를 만들고 있습니다 sshfs.

sshfs backup_user@target_ip:/home /mnt/backup

이 명령에 비밀번호를 포함시키는 방법이 있습니까?

또는 FTP / SFTP 이외의 로그인 비밀번호를 포함 할 수있는 다른 파일 전송 솔루션이 있습니까?


4
ssh-gkeygen을 사용하여 RSA 키 페어를 생성 한 다음 RSA 인증을 사용하도록 ssh (클라이언트 및 서버)를 구성 할 수 있습니다. "일반"ssh 인증을 위해이 작업을 수행 했습니까?
airhuff 2012 년

예, 그러나 서버가 ssh를 통해 연결하는 방식을 변경해야합니다. 지금까지 인증이 키 기반이거나 로그인 / 암호가 아니라는 점을 알고 있습니다.
Zaza

2
둘 다 될 수 있습니다. 그들은 보통 있습니다. 이렇게하면 새로 만든 사용자가 암호를 입력하여 서버에서 키를 누를 수 있습니다. 이후에는 키를 사용합니다.
xhienne

답변:


11

-o password_stdinfreeBSD와 같은 모든 시스템에서 작동하지 않는 것 같습니다. 등

또한 사용할 수 있습니다 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
    

14

매뉴얼에 따르면 -o password_stdin표준 입력에서 비밀번호를 읽을 수 있는 옵션이 있는데, 이는 아마도 리디렉션 일 수 있습니다. 나는 그것을 사용한 적이 없으므로 추측하고 있습니다.

즉, 본질적으로 안전하지 않은 솔루션에 대해서는 강력히 권고합니다.

ssh개인 / 공개 키 시스템과 매우 잘 작동합니다. 간단하고 안전합니다. 쉘 스크립트에 암호를 입력하거나 명확하게 작성할 필요가 없습니다. 서버에서 공개 키를 누르면 바로 연결할 수 있습니다.


누구나이 솔루션의 실제 예를 제공 할 수 있습니까? 나는 다음을 시도하고 있지만 작동하지 않습니다.printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
MikeyE

참고로, 비밀번호로 보호 된 SSH 키를 사용한다고 언급 했어야합니다. @ nathan-s-watson-haigh가 제공 한 답변을 사용하여 작동시킬 수있었습니다 : unix.stackexchange.com/questions/128974/…
MikeyE

암호로 보호 된 SSH 키로 ssfs 마운트를 테스트 할 수있는 일치하는 환경이 없습니다. 어쨌든, 당신의 명령에서 처음에 나를 치는 것은 -o password_stdin옵션 이 보이지 않는다는 것입니다.
xhienne

입력 주셔서 감사합니다. 방금 다음 명령을 시도했지만 암호를 요구하지 않지만 반환되지 않습니다. 즉, 명령 프롬프트가 완료되기를 기다리는 동안 명령 프롬프트가 표시되지 않습니다. 나는 명령을 시도했다 : printf "my_password\n" | sshfs -o password_stdin user@hostname:/ $HOME/local_dir PS 나는 데비안 버스터 PPS에있다. 이것은 작동하지만, 암호를 요구한다 :sshfs -o password_stdin user@hostname:/ $HOME/local_dir
MikeyE

11

bash 에서 작동 하도록 "sshfs password"with <<<를 파이프 -o password_stdin:

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< "sshfs password"

4
이것은 정답입니다. .. 모든 Linux OS에서 작동합니다.
argon

그렇다면 systemd로 자동 마운트하기 위해 파일 mnt-media.mount에 넣는 방법은 무엇입니까?
João José

하나의 초소형 주석 : 비밀번호에 특수 BASH 문자 (예 : bang (!))가있는 경우 비밀번호에 큰 따옴표 대신 작은 따옴표를 사용해야합니다.
Kyle Challis

5
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin

"-o password_stdin"옵션을 사용하면 비밀번호를 파이프 할 수 있습니다.

서비스 공급자가 sftp에 키를 사용하도록 허용하지 않는 한 키가 더 나은 옵션입니다. (이것은 WP Engine의 주목할만한 실패 중 하나입니다.)


답을 명확하게 설명해 주시겠습니까? SE에서는 한 줄의 코드 만 좋은 답변으로 간주하지 않습니다
Romeo Ninov

@RomeoNinov이 게시물이 질문에 충분히 대답한다고 말합니다. 모든 사람들이 왜 그 명백한 것이 명백한지를 설명하는 소설을 쓰려고하는 것은 아닙니다.
Satō Katsura

@SatoKatsura 감사합니다. 그러나 나는 도전에 달려있다.
iateadonut

2

마운트 스크립트 :

#!/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

1

명심해야 할 점은 -o password_stdin옵션을 사용하는 경우 sshfs가 호스트에 연결할지 여부를 묻기 때문에 (작동하지 않는 것이 처음 인 경우 추가되지 않은 경우) 옵션이 작동하지 않는 것처럼 보일 수 있습니다. 알려진 호스트 파일에 아직). 배치로 실행하면 sshfs가 표시되지 않습니다. 이를 피하기위한 해결책은 다음과 같습니다.

  1. -o StrictHostKeyChecking=nosshfs에 옵션을 추가 하거나
  2. sshfs를 수동으로 한 번 실행하여 알려진 호스트 파일에 호스트를 추가하십시오.

0

sftp와 sshfs를 연결하는 자동 스크립트

#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.