sshpass

4271 ワード

前言:
sshコマンドは、パスワードのパラメータが指定されていないため、スクリプトでsshコマンドを使用する場合、手動でパスワードを入力して実行を継続する必要がある.これにより、スクリプトの自動化実行が悪くなり、特にsshに対応するマシン数が多い場合、気が狂う.expectスクリプトとsshpassによる実現の2つの方法について説明する.
*)expectスクリプトを使用して1.expectはシステムに付属するツールではなく、yum install expect-yをインストールする必要があります.
2.expectスクリプトの作成規則
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1 . [#!/usr/bin/expect] shell 。  : 。  2 . [set timeout ]  , : . timeout - 1   3 . [spawn ]  spawn expect expect , , . 4 . [expect  "" ]  expect expect , . 5 . [send  "\r" ]  , 。  : “\r”, . 6 . [interact]  , , , expect eof 7 . $argv expect bash . [lindex $argv n] ,n 0 , , , ....
簡単な例:
1
2
3
4
5
6 #! /usr/bin/expect
  spawn sudo apt-get install vim expect  "password" send  "\r" expect eof
これでsudoパスワードの入力を避けることができます
3.ケーススタディ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #! /bin/bash
  function auto_ssh() {   username_server= "$1"   password= "$2"   command= "$3"
    ssh_warpper="      spawn ssh -o StrictHostKeyChecking=no $username_server \"$command\"
    expect {                                   
      -nocase \"password:\" {send \"$password\r\"}            
    }                                       
    expect eof                                 
  "   echo -e $ssh_warpper | /usr/bin/expect }
  auto_ssh root @172 .16. 1.121   123456   "ifconfig eth0"
コメント:ssh-o StrictHostKeyChecking=no初めてログインしたマシンをチェックせず、ユーザーがyes/no echo-e$ssh_を手動で入力することを回避warpper,-eパラメータは後続の文字列に対して、エスケープサポートスイッチを開く.
*)sshpassの使用
公式サイトのアドレス:http://sourceforge.net/projects/sshpass/ sshpasswgetのインストールhttp://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gztar zxvf sshpass-1.05.tar.gzcd sshpass-1.05./configuremake && make install
または
# yum install epel-release
プラグインをロードしました:fastestmirror
# yum repolist
# yum -y install sshpass
使用方法:
# sshpass
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin
   -P prompt     Which string should sshpass search for to detect a password prompt
   -v            Be verbose about what you're doing
   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used
# export SSHPASS="user_password"
# sshpass -e ssh -p22022 [email protected] "hostname"
Nasty PTR record "192.168.5.77"is set up for 192.168.5.77, ignoring
vic8