링크 ux 는 원 격 호스트 에 로그 인하 지 않 고 명령 을 실행 합 니 다 (키 쌍 과 기대)

Linux 에서 상호작용 을 하지 않 고 로그 인 하 는 것 은 보통 두 가지 가 있 습 니 다.
1. SSH 암호 없 는 인증 방식
    클 라 이언 트 는 ssh - keygen 을 사용 하여 키 쌍 을 만 들 고 공개 키 를 서버 (authorized keys) 에 복사 합 니 다. SSH 는 공개 키 로그 인 을 제공 합 니 다. SSH 가 서버 에 접근 할 때 서버 는 먼저 이 컴퓨터 에서 클 라 이언 트 의 공개 키 를 찾 은 다음 에 클 라 이언 트 가 보 낸 공개 키 를 비교 합 니 다. 일치 하면 공개 키 로 클 라 이언 트 에 암호 화하 고 클 라 이언 트 는 비밀 키 로 복호화 합 니 다.모든 전송 데 이 터 를 암호 화 합 니 다.
1 >. 클 라 이언 트 컴퓨터 에 키 쌍 만 들 기
\# ssh - keygen - t rsa\# 돌아 오 는 길
2 >. ssh 서버 에 로그 인하 여. ssh 디 렉 터 리 생 성 및 설정 권한
# mkdir /root/.ssh
# chmod 700 /root/.ssh

3 >. 공개 키 를 서버 에 업로드 하고 authorized. keys 로 이름 바 꾸 기
# scp /root/.ssh/id_rsa.pub root@   IP:/root/.ssh/authorized_keys #id_rsa.pub            

4 >. ssh 서버 설정
# vi /etc/ssh/sshd_config 
RSAAuthentication yes           #       ,       
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no    #      
# service sshd restart

5 >. 상호 로그 인 테스트 를 면제 하고 원 격 호스트 디스크 파 티 션 을 봅 니 다.
# ssh root@   IP 'df -h'

2. expect 도 구 를 이용 하여 상호작용 임 무 를 자동 으로 실현 한다.
   expect 는 사람의 간섭 없 이 자동 과 상호작용 임 무 를 실현 하 는 무료 프로 그래 밍 도구 언어 입 니 다.
   CentOS 설치: yum install expect
   Ubuntu 설치: sudo apt - get install expect
1 >. 원 격 호스트 디스크 파 티 션 보기
#!/usr/bin/expect
set ip 192.168.1.156
set pass 123.com    
set timeout 30
spawn ssh root@$ip
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$pass\r"}
}
expect "root@*"  {send "df -h\r"}
expect "root@*"  {send "exit\r"}
expect eof
# interact

2 >. Shell 스 크 립 트 에 Expect 문법 삽입
 방법 1: EOF 를 사용 하여 내용 세그먼트 를 expect 로 실행 합 니 다.
#!/bin/bash
user=root
pass='123'
ip='192.168.1.154'
/usr/bin/expect < 
  
#!/bin/bash
user=root
pass='123'
ip='192.168.1.154'
expect -c "
    spawn ssh $user@$ip
    expect {
        \"(yes/no)\" {send \"yes\r\"; exp_continue}
        \"password:\" {send \"$pass\r\"; exp_continue}
        \"root@*\" {send \"df -h\r exit\r\"; exp_continue}
    }"

방법 2: expect 스 크 립 트 를 독립 합 니 다.
# vi login.exp      #       
#!/usr/bin/expect 
set ipaddress [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
if { $argc != 3 } {
puts "Usage: expect login.exp ipaddress username password"
exit 1
}
set timeout 30
spawn ssh $username@$ipaddress
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$password\r"}
}
expect "$username@*"  {send "df -h\r"}
expect "$username@*"  {send "exit\r"}
expect eof
# vi user_info     #      
192.168.1.156   user    user
192.168.1.154   root    123.com
# vi expect.sh     #            
#!/bin/bash
for ip in `awk '{print $1}' user_info`
do
    user=`awk -v I="$ip" '{if(I==$1)print $2}' user_info`
    pass=`awk -v I="$ip" '{if(I==$1)print $3}' user_info`
    expect login.exp $ip $user $pass
done

매개 변수 설명:
set: 시간 초 과 를 설정 할 수도 있 고 변 수 를 설정 할 수도 있 습 니 다.
timeout: expect 시간 초과 대기 시간, 기본 10S
spawn: 명령 실행
expect "": 출력 과 일치 하 는 내용
exp_contine: 아래 일치 하 는 것 을 계속 실행 합 니 다.
리 턴
$argc: 위치 매개 변수 수량 통계
[lindex $argv 0]: 스 크 립 트 후 첫 번 째 매개 변 수 는 셸 중 $1 과 유사 합 니 다.
puts: echo 와 유사 한 인쇄 문자열
awk - v I = "$ip": 할당 변수
expect {...}: 여러 줄 의 기록 을 입력 하 십시오.
기타 매개 변수 설명:
timeout - 1: 시간 을 초과 하지 않 고 종료 합 니 다.
log_file/var/log/expect. log: 상호작용 정 보 를 기록 하고 일반 crontab 에서 사용 합 니 다.
interact: 대화 후 원 격 단말 기 를 종료 하지 않 습 니 다. expect "root @ *"{send "exit\r"} 설명 을 추가 하려 면 추가 하지 않 으 면 바로 종료 합 니 다.
spawn ssh root @ $ip 을 spawn ssh - o StrictHostKeyChecking = no 로 변경 합 니 다.root@ip서버 컴퓨터 키 를 로 컬 known 에 추가 할 지 여 부 를 더 이상 알려 주지 않 습 니 다.hosts

좋은 웹페이지 즐겨찾기