세 가지 Shell 스 크 립 트 프로 그래 밍 에서 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:
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 에 사용 하 는 것 이 더 편리 합 니 다.