ホームページ バックエンド開発 Python チュートリアル SSHバッチログインとコマンド実行のためのPython実装コード

SSHバッチログインとコマンド実行のためのPython実装コード

Jun 16, 2016 am 08:47 AM

LAN 内には 100 台以上のコンピュータがあり、すべて Linux オペレーティング システムであり、すべてのコンピュータが同じ構成および同じシステム (ユーザー名とパスワードを含む) を持ち、IP アドレスが自動的に割り当てられます。これらのコンピュータ上で特定のコマンドを実行したり、特定のソフトウェアのインストール、特定のファイルのコピー、一括シャットダウンなどの特定の操作を実行したりするタスクが存在します。一つ一つ手動で操作しなければならない場合、時間も手間もかかりますし、複数の操作が必要な場合はさらに手間がかかります。
オンライン同時通訳とは何ですか?これは、コンピュータにインストールして設定し、「Lenovo ネットワーク同時通訳」などのソフトウェアを使用して、システムをそのままコピーすることを意味します。これは、システムをインストールするときに非常に便利です。 1 台のコンピュータで同時通訳 将来的には、すべてのコンピュータにオペレーティング システムがインストールされ、非常に便利になります。同時通訳では、すべてのコンピューターがまったく同じハードウェアを備えている必要があります。Lenovo のコンピューターにインストールされているシステムを創設者のコンピューターに移すと、必ず問題が発生します。システムのアップロードも、ハード ドライブのサイズによっては非常に時間がかかり、30G のハード ドライブの場合は 100 台以上のコンピュータに転送するのに 2 時間以上かかります。一つずつ!ただし、システムが転送されていて、ソフトウェアをインストールし忘れていることが判明した場合、またはまだ若干の変更を加える必要がある場合は、同時に再転送することもできますが、速度が遅すぎて、 2回転送すると半日かかります。現時点では、ssh を使用して各コンピューターを制御し、特定のコマンドを実行できます。
まず、ssh リモート ログインのプロセスを思い出してください。最初にコマンド ssh username@192.168.1.x を実行します。初めてログインするとき、システムは接続を継続するかどうかを尋ねます。 「yes」を入力して待ちます。しばらくすると、パスワードを入力するよう求められます。パスワードを正しく入力すると、リモート コンピュータにログインできるようになり、コマンドを実行できるようになります。私たちは、人間とコンピューターの対話が 2 つあることに気付きました。1 つは「はい」と入力し、もう 1 つはパスワードを入力することです。 2 つの対話があるため、特定のコマンドを使用するだけでタスクを完了することはできません。人間とコンピューターの対話を自動対話に変えることを検討できます。Python の pexpect モジュールは、自動対話の実現に役立ちます。次のコードは、pexpect を使用して自動対話型ログインを実現し、コマンドを実行する関数です。

コードをコピー コードは次のとおりです。

# !/usr/bin/env python
# -*-coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['パスワード:', '接続を続行します (はい /いいえ)?']、タイムアウト = 5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('はい')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
pexpect.EOF を除く:
print "EOF"
ssh.close()
ret = -1
pexpect.TIMEOUT を除く:
print "TIMEOUT"
ssh.close()
ret = -2
return ret

pexpect モジュールを使用すると、自動対話機能が提供されるため、多くのことが実装できます。 ftp、telnet、ssh、scp の自動ログインなどは非常に実用的です。上記のコードに基づいて、読者はすでにその実装方法を知っていると思います (Python はとても簡単です!)。
上記のコードを使用してタスクを完了しても、プログラムは自動対話が表示されるまで待機する必要があり、また、ubuntu では ssh を使用して接続が遅く、セキュリティを反映するために一連の検証が必要になるため、依然として時間がかかります。 sshの。効率を高めて、できるだけ短い時間で完了する必要があります。その後、Python の paramiko モジュールを発見しました。これにより、ssh ログインの実装が簡単になります。以下のコードを見てください:
コード をコピーします。 コードは次のとおりです:

#-*-coding: utf- 8 -*-
#!/usr/bin/python
import paramiko
インポート スレッド
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
cmd の場合:
stdin, stdout, stderr = ssh .exec_command(m)
# stdin.write("Y") #簡単な操作、「Y」を入力
out = stdout.readlines()
#画面出力
o in out:
print o,
print '%stOKn'%(ip)
ssh.close()
以外:
print '%stErrorn'%(ip)
if __name__==' __main__':
cmd = ['cal','echo hello!']#実行するコマンドのリスト
username = "" #ユーザー名
passwd = "" #パスワード
threads = [] #マルチスレッド
print "Begin..."
for i in range(1,254):
ip = '192.168.1.'+str(i)
a= threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()

上記のプログラムにはまだいくつかのトリックがあります:
1. マルチスレッドを使用して、同時にログイン要求を発行し、同時にコンピューターに接続します。マルチスレッドの必要はなく、1 つずつ実行するだけで、コンピュータ上での操作が完了するまでに約 5 ~ 10 秒かかります。ソフトウェアのインストールまたはアンインストールの場合、所要時間は異なります。もっと長く。これには 10 ~ 20 分かかりますが、マルチスレッドを使用すると、すべてのコマンドの実行にかかる時間は 2 分未満になります。
2. ソフトウェアをインストールまたはアンインストールするときに、パスワードの入力を求めるプロンプトが表示されるため、root ユーザーとしてログインすることをお勧めします。 !ソフトウェアをインストールするときは、apt-get install xxx に「-y」パラメータを追加することをお勧めします。これは、ソフトウェアのインストールまたは削除時に、インストールを続行するかアンインストールするかを尋ねられる場合があるためです。これも自動的な操作です。このパラメーターを追加した後は、人間とコンピューターの対話は必要ありません。
3. ループする場合は、すべての IP をループします。コンピュータの IP はルーターによって自動的に割り当てられるため、欠落しているホストがないことを確認するためにすべてを実行するのが最善です。コマンドをリモートで実行するときに対話が発生します。このように、stdin.write("Y") を使用して対話を完了します。「Y」は「Y」を入力することを意味します。
5. すべてのコマンドをリストに入れ、リストをたどってリスト内のコマンドを順番に実行します。
6. より適切に制御するには、事前にコンピューターで root ユーザーを開いてインストールすることをお勧めします。 ssh サーバーに接続し、自動的に起動します。

著者: cnblogs ma6174
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles