PythonはPanamikoモジュールを使ってスクリプトを作成し、遠隔サーバ操作を行う。
プロフィール:
paramikoはpython(2.2以上)のモジュールであり、SSH 2プロトコルに従い、リモートマシンとの安全(暗号化と認証)接続を実現しました。
インストールに必要なパッケージ:
http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.5.tar.gz
http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz
単台サーバを管理する:
スクリプト1:クエリ172.6.2.23ディスクの使用状況
スクリプト2:リモートサーバで対応するコマンドを実行します。
使い方:
SSH
以下は、sshのdsaまたはrsa公開鍵により、バッチ登録サーバ実行コマンドを検証する。
pythonスクリプトを実行:
paramikoはpython(2.2以上)のモジュールであり、SSH 2プロトコルに従い、リモートマシンとの安全(暗号化と認証)接続を実現しました。
インストールに必要なパッケージ:
http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.5.tar.gz
http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz
tar zxvf pycrypto-2.5.tar.gz
cd pycrypto-2.5
python setup.py build
python setup.py install
tar zxvf paramiko-1.7.7.1.tar.gz
cd paramiko-1.7.7.1
python setup.py build
python setup.py install
スクリプトの簡単作成:単台サーバを管理する:
スクリプト1:クエリ172.6.2.23ディスクの使用状況
#!/usr/bin/python
import paramiko
hostname="172.16.22.23"
port=22
username="root"
password="larryroot"
if __name__=="__main__":
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname,port,username,password)
stdin,stdout,sterr=s.exec_command("df -Th")
print stdout.read()
s.close()
スクリプト2:リモートサーバで対応するコマンドを実行します。
#!/usr/bin/python
#by larry
#2011/01/30
import sys
import paramiko
hostname=sys.argv[1]
command = " ".join(sys.argv[2:])
port=22
username="root"
password="larryroot"
if __name__=="__main__":
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname,port,username,password)
stdin,stdout,sterr=s.exec_command(command)
print stdout.read()
s.close()
使用方法:
python single1.py ip
[root@localhost ~]# python single1.py 172.16.22.23 df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext3 13G 6.0G 5.7G 52% /
/dev/sda1 ext3 104M 12M 87M 13% /boot
tmpfs tmpfs 61M 0 61M 0% /dev/shm
/dev/sda4 ext3 7.6G 465M 6.8G 7% /data
/dev/sdb1 ext3 32G 5.9G 25G 20% /autocd
[root@localhost ~]# python single1.py 172.16.22.23 free -m
total used free shared buffers cached
Mem: 114 112 2 0 26 35
-/+ buffers/cache: 50 64
Swap: 1027 0 1027
スクリプト3:複数のサーバを管理する:IPリスト内の対応サーバのディスクの使用状況を一括で確認する。
#!/usr/bin/python
#by larry
#2011/01/30
import paramiko
port=22
username="root"
file=open("ip.list")
for line in file:
hostname=str(line.split("\t")[1])
password=str(line.split("\t")[4]).strip()
print "##########################",hostname,"########################"
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname,port,username,password)
stdin,stdout,sterr=s.exec_command("df -Th")
print stdout.read()
s.close()
file.close()
使い方:
[root@localhost ~]# python ssh.py
############################ 172.16.22.22 ########################
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext3 12G 5.6G 5.3G 52% /
/dev/sda1 ext3 99M 12M 83M 13% /boot
tmpfs tmpfs 58M 0 58M 0% /dev/shm
/dev/sda4 ext3 7.1G 443M 6.3G 7% /data
/dev/sdb1 ext3 30G 5.5G 23G 20% /autocd
############################ 172.16.22.23 ########################
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext3 15G 2.6G 11G 19% /
/dev/sda1 ext3 99M 12M 82M 13% /boot
tmpfs tmpfs 60M 0 60M 0% /dev/shm
/dev/sda4 ext3 33G 377M 31G 2% /data
ip.listファイルの内容:
dx 172.16.22.22 22 root larryroot
wt 172.16.22.23 22 root larryroot
スクリプト4:スクリプト2と同様に、すべてのリモートサーバで対応するコマンドを実行します。
#!/usr/bin/python
#by larry
#2011/01/30
import paramiko
import sys
port=22
username="root"
command = " ".join(sys.argv[1:])
file=open("ip.list")
for line in file:
hostname=str(line.split("\t")[1])
password=str(line.split("\t")[4]).strip()
print "##################",hostname,"######################"
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname,port,username,password)
stdin,stdout,sterr=s.exec_command(command)
print stdout.read()
s.close()
file.close()
使い方:
python ssh.py
簡単にここに整理します。pythonのparamikoモジュールで簡単に管理サーバーができます。ファイルのアップロードはダウンロードしてから整理します。SSH
以下は、sshのdsaまたはrsa公開鍵により、バッチ登録サーバ実行コマンドを検証する。
#!/usr/bin/python
#2012/02/02 by larry
import paramiko
import sys,os
port=22
username="larry"
key_file="~/.ssh/authorized_keys"
know_host="/home/larry/.ssh/known_hosts"
command=" ".join(sys.argv[1:]) ####
file=open("ip.list")
for line in file:
hostname=str(line.split(" ")[1]) #### ip
print "#####################################",hostname,"###############################################"
s=paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.load_system_host_keys(know_host)
s.connect(hostname,port,username,key_file)
stdin,stdout,sterr=s.exec_command(command)
print stdout.read().strip()
s.close()
file.close()
pythonスクリプトを実行:
python sshkey.py df -h
################172.16.22.22########################
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
14G 3.5G 9.7G 27% /
/dev/mapper/VolGroup00-data
116G 47G 64G 43% /data
/dev/cciss/c0d0p1 99M 13M 82M 14% /boot
tmpfs 5.9G 0 5.9G 0% /dev/shm