SSH library for xbot.framework
Project description
Introduction
xbot.plugins.ssh provides ssh and sftp support for xbot.framework
Installation
Install via pip:
pip install xbot.plugins.ssh
Getting Started
import os
import shutil
from xbot.plugins.ssh.ssh import SSHConnection
from xbot.plugins.ssh.sftp import SFTPConnection
# Modify the following information to your own before trying to run.
host = '192.168.8.8'
user = 'xbot'
pwd = 'xbot'
# Create ssh connection.
sshconn = SSHConnection()
sshconn.connect(host, user, pwd)
# Expect the return code of command is 0.
sshconn.exec('ls -l', expect=0)
# Expect the return code of command is 2.
sshconn.exec('ls /errpath', expect=2)
# Expect the output of command contains `username`.
sshconn.exec('whoami', expect=user)
# Don't check the result of command.
sshconn.exec('ls -l', expect=None)
sshconn.exec('ls /errpath', expect=None)
# Execute command with sudo.
sshconn.sudo('whoami', expect='root')
# Interactive command.
sshconn.exec("read -p 'input: '", prompts={'input:': 'hello'})
# Attributes and methods of SSHCommandResult.
cmd = 'echo -e "jack 20\ntom 30"'
result = sshconn.exec(cmd)
assert str(result) == 'jack 20\ntom 30'
assert result.rc == 0
assert result.cmd == cmd
assert result.getfield('tom', 2) == '30'
assert result.getcol(2) == ['20', '30']
# Create sftp connection.
sftpconn = SFTPConnection()
sftpconn.connect(host, user, pwd)
# Preparing for sftp testing.
lhome = os.environ.get('HOME') or os.environ['HOMEPATH']
lputdir = os.path.join(lhome, 'lputdir')
lgetdir = os.path.join(lhome, 'lgetdir')
rputdir = '/tmp/rputgetdir'
rgetdir = rputdir
if os.path.exists(lputdir):
shutil.rmtree(lputdir)
if sftpconn.exists(rputdir):
sshconn.exec(f'rm -rf {rputdir}')
sftpconn.makedirs(rputdir)
os.makedirs(os.path.join(lputdir, 'dir', 'subdir'))
os.system('whoami > %s' % os.path.join(lputdir, 'file'))
os.system('whoami > %s' % os.path.join(lputdir, 'dir', 'subfile'))
# Put directory.
l = os.path.join(lputdir, 'dir')
sftpconn.putdir(l, rputdir)
p1 = sftpconn.join(rputdir, 'dir', 'subdir')
assert sftpconn.exists(p1) == True
p2 = sftpconn.join(rputdir, 'dir', 'subfile')
assert sftpconn.exists(p2) == True
# Put file.
l = os.path.join(lputdir, 'file')
sftpconn.putfile(l, rputdir)
p1 = sftpconn.join(rputdir, 'file')
assert sftpconn.exists(p1) == True
sftpconn.putfile(l, rputdir, 'newfile') # rename
p2 = sftpconn.join(rputdir, 'newfile')
assert sftpconn.exists(p2) == True
# Get directory.
r = sftpconn.join(rgetdir, 'dir')
sftpconn.getdir(r, lgetdir)
p1 = os.path.join(lgetdir, 'dir', 'subdir')
assert os.path.exists(p1) == True
p2 = os.path.join(lgetdir, 'dir', 'subfile')
assert os.path.exists(p2) == True
# Get file.
r = sftpconn.join(rgetdir, 'file')
sftpconn.getfile(r, lgetdir)
p1 = os.path.join(lgetdir, 'file')
assert os.path.exists(p1) == True
sftpconn.getfile(r, lgetdir, 'newfile') # rename
p2 = os.path.join(lgetdir, 'newfile')
assert os.path.exists(p2) == True
# Open file.
p = sftpconn.join(rputdir, 'file')
with sftpconn.open(p, 'w') as fp:
fp.write('xbot')
with sftpconn.open(p, 'r') as fp:
assert fp.read().decode('utf-8') == 'xbot'
Demo Project
Here is a demo project showing how to use xbot.plugins.ssh in a test project.
简介
xbot.plugins.ssh 是为 xbot.framework 提供 ssh 和 sftp 支持的插件。
安装
使用 pip 安装:
pip install xbot.plugins.ssh
入门
import os
import shutil
from xbot.plugins.ssh.ssh import SSHConnection
from xbot.plugins.ssh.sftp import SFTPConnection
# Modify the following information to your own before trying to run.
host = '192.168.8.8'
user = 'xbot'
pwd = 'xbot'
# Create ssh connection.
sshconn = SSHConnection()
sshconn.connect(host, user, pwd)
# Expect the return code of command is 0.
sshconn.exec('ls -l', expect=0)
# Expect the return code of command is 2.
sshconn.exec('ls /errpath', expect=2)
# Expect the output of command contains `username`.
sshconn.exec('whoami', expect=user)
# Don't check the result of command.
sshconn.exec('ls -l', expect=None)
sshconn.exec('ls /errpath', expect=None)
# Execute command with sudo.
sshconn.sudo('whoami', expect='root')
# Interactive command.
sshconn.exec("read -p 'input: '", prompts={'input:': 'hello'})
# Attributes and methods of SSHCommandResult.
cmd = 'echo -e "jack 20\ntom 30"'
result = sshconn.exec(cmd)
assert str(result) == 'jack 20\ntom 30'
assert result.rc == 0
assert result.cmd == cmd
assert result.getfield('tom', 2) == '30'
assert result.getcol(2) == ['20', '30']
# Create sftp connection.
sftpconn = SFTPConnection()
sftpconn.connect(host, user, pwd)
# Preparing for sftp testing.
lhome = os.environ.get('HOME') or os.environ['HOMEPATH']
lputdir = os.path.join(lhome, 'lputdir')
lgetdir = os.path.join(lhome, 'lgetdir')
rputdir = '/tmp/rputgetdir'
rgetdir = rputdir
if os.path.exists(lputdir):
shutil.rmtree(lputdir)
if sftpconn.exists(rputdir):
sshconn.exec(f'rm -rf {rputdir}')
sftpconn.makedirs(rputdir)
os.makedirs(os.path.join(lputdir, 'dir', 'subdir'))
os.system('whoami > %s' % os.path.join(lputdir, 'file'))
os.system('whoami > %s' % os.path.join(lputdir, 'dir', 'subfile'))
# Put directory.
l = os.path.join(lputdir, 'dir')
sftpconn.putdir(l, rputdir)
p1 = sftpconn.join(rputdir, 'dir', 'subdir')
assert sftpconn.exists(p1) == True
p2 = sftpconn.join(rputdir, 'dir', 'subfile')
assert sftpconn.exists(p2) == True
# Put file.
l = os.path.join(lputdir, 'file')
sftpconn.putfile(l, rputdir)
p1 = sftpconn.join(rputdir, 'file')
assert sftpconn.exists(p1) == True
sftpconn.putfile(l, rputdir, 'newfile') # rename
p2 = sftpconn.join(rputdir, 'newfile')
assert sftpconn.exists(p2) == True
# Get directory.
r = sftpconn.join(rgetdir, 'dir')
sftpconn.getdir(r, lgetdir)
p1 = os.path.join(lgetdir, 'dir', 'subdir')
assert os.path.exists(p1) == True
p2 = os.path.join(lgetdir, 'dir', 'subfile')
assert os.path.exists(p2) == True
# Get file.
r = sftpconn.join(rgetdir, 'file')
sftpconn.getfile(r, lgetdir)
p1 = os.path.join(lgetdir, 'file')
assert os.path.exists(p1) == True
sftpconn.getfile(r, lgetdir, 'newfile') # rename
p2 = os.path.join(lgetdir, 'newfile')
assert os.path.exists(p2) == True
# Open file.
p = sftpconn.join(rputdir, 'file')
with sftpconn.open(p, 'w') as fp:
fp.write('xbot')
with sftpconn.open(p, 'r') as fp:
assert fp.read().decode('utf-8') == 'xbot'
示例项目
展示如何在一个测试项目中使用本插件的示例:demo
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xbot.plugins.ssh-0.1.0.tar.gz.
File metadata
- Download URL: xbot.plugins.ssh-0.1.0.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.10.0 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/1.0.0 urllib3/1.26.19 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab90ee3c9a4ef1ed7d30775669736ae8eaf4fb2e25545229e7dcea018e81568d
|
|
| MD5 |
5a958c798a744568794406099541a254
|
|
| BLAKE2b-256 |
017b1509f8b9b13f424eab7cdc35639d674e2f8b16c223e29064d32a48c2ce36
|
File details
Details for the file xbot.plugins.ssh-0.1.0-py3-none-any.whl.
File metadata
- Download URL: xbot.plugins.ssh-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.10.0 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/1.0.0 urllib3/1.26.19 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d64948ded226f056cae11f5877b95ff00693c52f87cfd788d3c1d7d33727e9f7
|
|
| MD5 |
8d940c37a7ad398918d60e28505ae23f
|
|
| BLAKE2b-256 |
149b4bb2f9b21c45abfa4820ce44fb79ba8be5d316033c91d4cd74fdd03c21f6
|