SFTP를 통해 서버에 일부 파일을 업로드하는 스크립트를 만들려고 합니다. 대화형 lftp 세션을 열고 거기에 사용자 이름과 비밀번호를 제공하여 이 작업을 수동으로 수행할 수 있습니다. 내 생각엔 대본의 경우
- (명백한 이유로) 스크립트에 자격 증명을 하드코딩하지 마세요.
- 명령줄에서 언급하지 마세요. (저는 .bash_history에 포함하고 싶지만 자격 증명은 필요하지 않습니다.)
lftp
바우처.netrc
또는 이와 유사한 내용을 읽어보세요 .
나는 이것을 작동시킬 수없는 것 같습니다. 현재 해결 방법은 자격 증명을 구문 분석 .netrc
하고 이를 lftp 스크립트에 추가한 다음 제거하는 래퍼 스크립트입니다 . 이는 수동으로 수행하는 단계를 시뮬레이션하지만 기존 기능을 다시 구현하여 효과가 좋지 않은 것 같습니다. 이것이 작동하는 동안 문제는 남아 있습니다.
lftp는 SFTP 연결을 위해 .netrc를 읽을 수 있습니까?
그렇다면 세관 포트가 설정의 일부인 경우 특별한 구문 요구 사항이 있습니까? 에 연결해야 합니다.sftp://username:[email protected]:12322
답변1
ssh
가장 좋은 방법은 3단계 처럼 키 쌍을 사용하여 서버에 액세스하는 것입니다 .
키 쌍을 만듭니다(아직 없는 경우).
ssh-keygen -t rsa -C "" -f ~/.ssh/id_rsa
공개 키를 서버에 복사합니다.
ssh-copy-id [email protected] -p 12322
서버에 연결:
lftp sftp://[email protected]:12322
비표준 경로를 키로 사용하려면 ! ssh-agent
또는 그 앞에 키를 추가해야 합니다 .ssh/config
.
답변2
~에 따르면lftp
매뉴얼 페이지,~/.netrc
예지원/사용자 lftp
:
~/.netrc
FTP 서버의 기본 로그인 이름과 비밀번호를 얻으려면 이 파일을 참조하십시오. 사용자 이름은 있지만 비밀번호는 없는 URL을 사용하는 경우 여기에서도 비밀번호가 검색됩니다.
이 기사를 읽으면 사용자 정의 포트 URL을 사용해도 괜찮을 것 같습니다.
답변3
나는 확인할 수 있다roneo.org대답은 정확하고스토리 코더포트 지정 방법을 설명하는 설명도 유효합니다.
.netrc
자격 증명을 일반 텍스트 파일에 저장하지 않고 트래픽을 암호화하는 보다 안전한 로그인 옵션을 원합니다 .
lftp를 통해 파일을 명시적으로 호출할 수 있다면 파일을 암호화하여 전달할 .netrc
수 있습니다 . 불행히도 그렇게 할 수는 없습니다..netrc
gpg
lftp
cURL
하지만 할 수 있는 일은 모든 연결 정보(비밀번호 포함)가 포함된 암호화된 FTP URL 문자열을 생성하여 lftp
.
전체 로그인 이름, 포트 및 서버 경로와 함께 단일 문자열을 포함하는 일반 텍스트 파일을 만드는 것부터 시작합니다. 기본적으로 lftp
북마크 파일( ~/.local/share/lftp/bookmarks
)을 별칭 없이 사용하는 경우에는 북마크 파일에 저장된 내용이 저장됩니다.
따라서 bookmarks
파일에 다음이 있는 경우:
myftpserver ftp://<user>:<pass>@ftp.mysite.com:10234/path/to/files/
당신은 단지 다음을 사용합니다 :
ftp://<user>:<pass>@ftp.mysite.com:10234/path/to/files/
먼저 빈 텍스트 파일을 만듭니다.
touch ~/.lftprc
텍스트 편집기를 사용하여 파일에서 ftp URL을 추가하여 bookmarks
bash 기록에서 비밀번호를 유지하세요.
vi ~/.lftprc
아직 설정한 적이 없다면 gpg
지금 설정하세요.
gpg --full-generate-key
그런 다음 다음 명령을 사용하여 파일을 암호화합니다 gpg
.
gpg -r <GPG USER ID/EMAIL> -e ~/.lftprc
그러면 파일은 다음과 같이 됩니다 ~/.lftprc.gpg
. 생성한 파일을 삭제하십시오.
rm ~/.lftprc
Bash
이제 전체 로그인 URL은 기본적으로 다음을 사용하여 호출 할 수 있는 암호화된 문자열입니다 gpg
.
lftp $( gpg --batch -q -d ~/.bookmark.gpg )
그런 다음 별칭으로 변환할 수 있습니다.
alias lftps='lftp $( gpg --batch -q -d ~/.bookmark.gpg )'
멋져 보이기 때문에 lftps를 선택했지만 원하는 것은 무엇이든 할 수 있습니다.
HOSTNAME:~ # lftps
cd ok, cwd=/path/to/files
lftp <user>@ftp.mysite.com:/path/to/files>
내 FTP 서버는 FTP를 통한 명시적 TLS를 지원하므로 보안 전송을 위해 .lftp.conf
다음을 수행합니다.
set ssl-allow true
set ssl:ca-file "/var/lib/ca-certificates/ca-bundle.pem"
set ftp:ssl-force true
그래서 결국 나는 lftp가 어떻게 사용자의 비밀번호를 서버에 전달하는지, 그리고 당신이 그것을 알아낼 수 있는지 알고 싶습니다...
답변4
자격 증명을 에 저장할 수 있습니다 ~/.netrc
. 파일은 다음과 같습니다.
machine ftp.cluster.host.net (do not include 'sftp://' here)
login yournickname
password xFrPkIB8767
그러면 연결할 수 있습니다
lftp sftp://[email protected]/
닉네임은 필수이지만 비밀번호는 닉네임에서 추출됩니다 .netrc
.
터미널 기록이 깨끗합니다!
당신은 또한 수명령을 직접 전달도착하다 lftp
:
lftp -c "open sftp://[email protected]; ls"
스크립트 및 bash 별칭에 매우 유용합니다!