GVFS를 사용하여 명령줄에서 FTP 마운트

GVFS를 사용하여 명령줄에서 FTP 마운트

저는 데스크톱 환경이 아닌 Debian Jessie를 사용하고 있습니다. 명령줄을 통해 FTP를 마운트하기 위해 gvfs-mount를 사용해 보았습니다.

나는 온라인에서 몇 가지 정보를 수집했고 gvfs가 dbus와 통신한다는 것을 알게 되었습니다.

그래서 나의 첫 번째 단계는dbus 및 gvfs에 필요한 패키지 설치:

apt-get install dbus-x11 gvfs-bin gvfs-fuse

그런 다음 dbus가 자체 서비스를 설치했기 때문에 재부팅했습니다.

그 후 www-data로 로그인했습니다.

sudo -Hu www-data -s /bin/bash

( -s /bin/bash사용자에게 bash가 없기 때문에)

여기에서 gvfs가 데몬과 통신할 수 있도록 dbus-daemon사용자를 위해 결과를 시작하고 내보내야 합니다. DBUS_SESSION_BUS_ADDRESS그래서 저는 이렇게 합니다:

dbus-launch --sh-syntax > "$HOME/.dbus_settings"

.dbus_settings다음과 유사한 콘텐츠를 포함합니다.

cat .dbus_settings 
DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-XwbyV2BmA5,guid=6c111d728c263543b61e6293570e1f22';
export DBUS_SESSION_BUS_ADDRESS;
DBUS_SESSION_BUS_PID=952;

DBUS_SESSION_BUS_ADDRESS현재 환경 변수는 설정되지 않았으므로 다음을 실행합니다.

export DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-XwbyV2BmA5,guid=6c111d728c263543b61e6293570e1f22'

향후 gvfs 설치를 처리하기 위해 .gvfs사용자 폴더를 만들었습니다 $HOME( www-data /var/www)

이제 (확실하지는 않지만) gvfs를 사용할 준비가 된 것 같습니다. 그래서 난 발사한다gvfsd 퓨즈이와 같이:

/usr/lib/gvfs/gvfsd-fuse $HOME/.gvfs -o big_writes

이것은 작동하는 것 같습니다. $HOME/.gvfs 폴더가 마운트된 것으로 나타납니다(그러나 아직 아무것도 없습니다).

마지막 명령은 유효한 FTP 마운트입니다.

gvfs-mount ftp://myftpuser@myftpserver < file_containing_ftp_password

하지만 항상 다음과 같은 오류가 발생합니다.

Error mounting location: Location is not mountable

이 단계는 내 Linux Mint 17.3 amd64 데스크탑에서 작동합니다. 하지만 Debian Jessie 서버(데스크톱 및 x11 없음)에서는 작동하지 않습니다.

도움을 주시면 감사하겠습니다.

답변1

문제를 발견했습니다. 패키지가 누락되었으며 gvfs-backends일부 명령이 쓸모가 없습니다.

다음 단계를 계속 진행하세요.

  1. 필요한 패키지를 설치합니다:

    apt-get 설치 dbus-x11 gvfs-bin gvfs-fuse gvfs-backends

  2. .gvfs 폴더가 없으면 새로 만듭니다.

    mkdir $HOME/.gvfs

  3. dbus 세션을 시작하고 DBUS_SESSION_BUS_ADDRESS재사용할 수 있도록 저장합니다.

    dbus-launch --sh-syntax > "$HOME/.dbus_settings"

  4. 예를 DBUS_SESSION_BUS_ADDRESS들어 내보내기source

    소스 "$HOME/.dbus_settings"

  5. 그냥 gvfs-mount를 사용하여 마운트하세요.

    gvfs 설치ftp://myftpuser@myftpserver

쉘에서 비밀번호를 묻는 메시지를 표시합니다. 비밀번호가 포함된 파일을 생성하고 이를 gvfs-mount에 제공하여 명령을 다음과 같이 할 수도 있습니다.

gvfs-mount ftp://myftpuser@myftpserver < file_containing_my_ftp_password
  1. 다음 위치에서 FTP 설치에 액세스하세요.

    cd $HOME/.gvfs/ftp:호스트\=myftpserver\, 사용자\=myftpuser/

완벽한!

답변2

그것을 사용하는 것이 가장 좋으며 dbus-run-session some-script.sh, 그 다음에는 gio mount그것을 호출하거나 다른 지오 도구를 호출할 수 있습니다 some-script.sh.

dbus-run-session은 스크립트가 실행된 후 dbus-daemon을 종료합니다. 또는 .dbus-run-session을 사용하는 경우 dbus-daemon을 수동으로 종료해야 합니다 dbus-launch.

dbus-run-session을 사용하는 것은 다른 스크립트를 작성하고 dbus-run-session 명령으로 호출해야 하기 때문에 약간 번거롭습니다.

다음을 수행할 수 있습니다.

#!/bin/sh

sed '1,/^exit$/d' $0 | dbus-run-session sh
exit

ftp_url=ftp://[email protected]/
ftp_password=password
echo $ftp_password | gio mount $ftp_url

ftp_gio_name=$(
    gio info $ftp_url | awk '$1 == "id::filesystem:" { print $2 }'
)
ftp_gio_path=$HOME/.gvfs/"$ftp_gio_name"
archive_path=$HOME/data

cp --archive --verbose --update \
   "$ftp_gio_path"/ \
   $archive_path

gio mount -u $ftp_url

또는 꼬리를 사용하십시오.

#!/bin/sh
tail +4 $0 | dbus-run-session sh
exit

# script here

또는 heredoc을 사용하십시오:

dbus-run-session sh <<DBUS_SESSION

# script here
# but you need to escape $ and \

foo=bar
echo \$foo
touch white\\ space

DBUS_SESSION

관련 정보