Python - scp転送を行う

Pythonからscp転送を行ってみます。

scp転送とはssh通信を使ったファイル転送です。

インストール

Pythonからscp転送を行うためには paramikoscp というライブラリをインストールする必要があります。

1
2
pip install paramiko
pip install scp

コード

scp転送を行う最小コードは次のようになります。

11行目では環境に応じて、IPアドレス・ポート番号・ユーザ名・パスワードを設定してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import scp
import paramiko

with paramiko.SSHClient() as ssh:
# 初回ログイン時に「Are you sure you want to continue connecting (yes/no)?」と
# きかれても問題なく接続できるように。
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# ssh接続する
print('[ssh接続]')
ssh.connect('[IPアドレス]', port=[ポート番号], username='[ユーザ名]', password='[パスワード]')

print('[SCP転送開始]')
# scp clientオブジェクト生成
with scp.SCPClient(ssh.get_transport()) as scp:
#
# SCP送信(ローカル → サーバ)
#
# ・同じファイルがあったら上書きされる。
# ・ディレクトリは指定できない。
scp.put('test.csv', '/var/samba/.')

#
# SCP受信(サーバ → ローカル)
#
# ・同じファイルがあったら上書きされる。
# ・ディレクトリは指定できない。
scp.get('/var/samba/mpv-shot0004.jpg', '.')

SCP送信する場合でも、SCP受信する場合でも、送信先に同じ名称のファイルがあると上書きされるので注意して下さい。

また、ディレクトリを指定することはできないので複数ファイルを送信する場合は、tarコマンドやzipコマンドを使って1ファイルにまとめてからscp転送する必要があります。

Python - ssh接続しコマンドを実行する

Pythonからssh接続を行いコマンドを実行する処理を行ってみます。

pythonからssh通信ができるようになると、複数サーバに同じコマンドを実行できたり、定期的にサーバ情報を取得し問題があったらアラートを発するなど監視ができるようになりとても便利です。

インストール

Pythonからssh接続を行うためには paramiko というライブラリをインストールする必要があります。

1
pip install paramiko

コード

ssh接続しコマンドを実行する最小コードは次のようになります。

9行目では環境に応じて、IPアドレス・ポート番号・ユーザ名・パスワードを設定してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import paramiko

with paramiko.SSHClient() as ssh:
# 初回ログイン時に「Are you sure you want to continue connecting (yes/no)?」と
# きかれても問題なく接続できるように。
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# ssh接続
ssh.connect('[IPアドレス]', port=[ポート番号], username='[ユーザ名]', password='[パスワード]')

# コマンド実行
stdin, stdout, stderr = ssh.exec_command('ls -al')

# コマンド実行後に標準入力が必要な場合
# stdin.write('password\n')
# stdin.flush()

# 実行結果を表示
for o in stdout:
print('[std]', o, end='')
for e in stderr:
print('[err]', e, end='')

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×