세 가지 Shell 스 크 립 트 프로 그래 밍 에서 SFTP 가 암 호 를 입력 하지 않도록 하 는 방법

4886 단어 lftp암호 면제
최근 프로 그래 밍 에 서 는 sftp 로 파일 을 업로드 하고 crontab 로 정시 업로드 이 벤트 를 미리 설정 해 야 합 니 다.sftp 는 ftp 와 달리-i 와 같은 옵션 을 제공 하지 않 았 습 니 다.암 호 를 프로그램 에 직접 인 코딩 할 수 있 습 니 다.sftp 명령 을 사용 하면 자동 으로 사용자 에 게 비밀 번 호 를 입력 하 라 고 요청 합 니 다.
sftp 가 암 호 를 입력 하 는 것 을 피 할 수 있 는 세 가지 방법 을 요약 합 니 다.
1.lftp 방식
LFTP                   。  FTP、HTTP、FISH、SFTP、HTTPS FTPS  。
  :(     192.168.107.132   /home/huangmr        )

 
#!/bin/sh 
 
HOST=192.168.107.132 
USER=huangmr
PASS=huangmr  
echo "Starting to sftp..." 
lftp -u ${USER},${PASS} sftp://${HOST}:22 <<EOF  
cd /home/huangmr
mget *.*  
bye  
EOF 
 
echo "done" 

2.expect 방식
expect 는 사람의 간섭 없 이 자동 과 상호작용 임 무 를 실현 하 는 무료 프로 그래 밍 도구 언어 입 니 다.
expect 를 사용 하려 면 tcl 이라는 물건 을 미리 설치 한 다음 expect 패 키 지 를 설치 해 야 합 니 다.
tcl:     http://prdownloads.sourceforge.net/tcl/tcl8.4.16-src.tar.gz
expect:     http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
예:
[plain]  view plain copy
#!/usr/local/bin/expect -f    
#<---insert here your expect program location  
#procedure to attempt connecting; result 0 if OK, 1 elsewhere  
 proc connect {passw} {  
  expect {  
    "(yes/no)?" {send "yes/r";exp_continue} #SFTP 를 처음 사용 할 때 yes/no 입력 을 요구 합 니 다.   
    "password:" {send "$passw/r"            #자동 입력 암호  
  expect {  
     "sftp*" {        #sftp 되 돌리 기 검사>  
   return 0  
      }    
  }  
     }  
  }  
  # timed out  
  return 1  
 }  
   
 #read the input parameters  
 set user [lindex $argv 0]  
 set passw [lindex $argv 1]  
 set host [lindex $argv 2]  
 set location [lindex $argv 3]  
 set file1 [lindex $argv 4]  
   
 #puts "Am citit:/n";  
 #puts "user: $user";  
 #puts "passw: $passw";  
 #puts "host: $host";  
 #puts "location: $location";  
 #puts "file1: $file1";  
  
   
 #check if all were provided  
 if { $user == "" || $passw == "" || $host == "" || $location == "" || $file1 == "" }  {  
   puts "Usage:     /n"  
   exit 1  
 }  
   
 #sftp to specified host and send the files  
 spawn sftp $user@$host  
   
 set rez [connect $passw]  
 if { $rez == 0 } {  
   send "cd $location/r"  
   set timeout -1  
   send "put $file1/r"  
   #send "ls -l/r"  
   #send "quit/r"  
   #send "mkdir testsftp/r"  
   send "quit/r"  
   expect eof  
   exit 0  
 }  
 puts "/nCMD_ERR: connecting to server: $host!/n"  
 exit 1  
 0  
expect 도 두 가지 형식 으로 호출 할 수 있다.
1   ./my.exp $usr $pwd $host $local $file
2.코드 에 직접 삽입 
expect<...
!
 
3.(추천)키 쌍 생 성
키 를 프로그램 에서 마 운 트 해제 하지 않 아 도 되 기 때문에 더 안전 합 니 다.
첫 번 째 단계:밀 스푼 쌍 을 만 듭 니 다.rsa 키 를 사용 합 니 다.명령 사용"ssh-keygen-t rsa"
   [user1@rh user1]$ ssh-keygen -t rsa
   Generating public/private rsa key pair.
   Enter file in which to save the key (/home/user1/.ssh/id_rsa):
   Created directory '/home/user1/.ssh'.
   Enter passphrase (empty for no passphrase):
   Enter same passphrase again:
   Your identification has been saved in /home/user1/.ssh/id_rsa.
   Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
   The key fingerprint is:
   e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7
[email protected]
   [user1@rh user1]$
생 성 과정 에서 키 쌍 의 저장 위 치 를 입력 하고 바로 차 로 돌아 가 기본 값 을 받 아들 이면 됩 니 다.이 어 패스워드 와 다른 비밀 번 호 를 입력 하고 차 로 돌아 가 비 워 두 는 것 을 알려 준다.물론 하 나 를 입력 할 수도 있 습 니 다.나 는 게 을 러 서 매번 비밀 번 호 를 입력 하고 싶 지 않다.)이렇게 하면 키 쌍 이 생 성 됩 니 다.
그 중 공공 키 가 존재 합 니 다~/.ssh/idrsa.pub 개인 키 유지~/.ssh/idrsa
그리고.ssh 디 렉 터 리 의 권한 을 바 꾸 고 명령"chmod 755~/.ssh"를 사용 합 니 다.   [user1@rh user1]$ chmod 755 ~/.ssh
 
다음 에 이 키 쌍 의 공공 키 를 방문 할 기계 에 복사 하고 저장 합 니 다.
   ~/.ssh/authorized_keys
   [user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys         
user1@rh1's
 password:
   id_rsa.pub                                    100%  228     3.2MB/s   00:00
   [user1@rh user1]$
이렇게 해서 큰 성 과 를 거 두 었 다.그 후에 ssh scp sftp 와 같은 것 으로 그 기 계 를 방문 할 때 비밀 번 호 를 입력 하지 않 아 도 됩 니 다.
자,script 에 사용 하 는 것 이 더 편리 합 니 다.

좋은 웹페이지 즐겨찾기