or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

tessl/pypi-parallel-ssh

Asynchronous parallel SSH client library that enables developers to execute SSH commands across many servers simultaneously with minimal system load on the client host.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
pypipkg:pypi/parallel-ssh@2.14.x

To install, run

npx @tessl/cli install tessl/pypi-parallel-ssh@2.14.0

0

# Parallel SSH

1

2

Asynchronous parallel SSH client library that enables developers to execute SSH commands across many servers simultaneously with minimal system load on the client host. Built on mature C libraries (libssh2 and libssh) providing thread safety, native asynchronous execution, and significantly reduced CPU and memory overhead compared to other Python SSH libraries.

3

4

## Package Information

5

6

- **Package Name**: parallel-ssh

7

- **Language**: Python

8

- **Installation**: `pip install parallel-ssh`

9

10

## Core Imports

11

12

```python

13

from pssh.clients import ParallelSSHClient, SSHClient

14

```

15

16

Alternative SSH implementation (libssh-based):

17

18

```python

19

from pssh.clients.ssh import ParallelSSHClient, SSHClient

20

```

21

22

Configuration and utilities:

23

24

```python

25

from pssh.config import HostConfig

26

from pssh.utils import enable_host_logger, enable_debug_logger

27

```

28

29

## Basic Usage

30

31

```python

32

from pssh.clients import ParallelSSHClient

33

34

# Execute commands on multiple hosts in parallel

35

hosts = ['host1.example.com', 'host2.example.com', 'host3.example.com']

36

client = ParallelSSHClient(hosts)

37

38

# Run a command on all hosts

39

output = client.run_command('uname -a')

40

41

# Wait for completion and get results

42

client.join()

43

for host_output in output:

44

print(f"Host: {host_output.host}")

45

for line in host_output.stdout:

46

print(line)

47

print(f"Exit code: {host_output.exit_code}")

48

49

# Single host usage

50

from pssh.clients import SSHClient

51

52

client = SSHClient('host.example.com')

53

host_output = client.run_command('ls -la')

54

for line in host_output.stdout:

55

print(line)

56

```

57

58

## Architecture

59

60

The library provides two main client implementations:

61

62

- **Native Client** (default): Based on `ssh2-python` (libssh2 C library) offering highest performance and stability

63

- **SSH Client**: Alternative implementation using `ssh-python` (libssh C library) with identical API

64

65

Both implementations support:

66

- **Parallel execution** across hundreds or thousands of hosts

67

- **Thread-safe operations** with native threading for CPU-bound tasks like authentication

68

- **Asynchronous I/O** using gevent for non-blocking operations

69

- **Comprehensive file transfer** via both SFTP and SCP protocols

70

- **Flexible authentication** including SSH keys, passwords, and SSH agent integration

71

- **Advanced networking** with proxy support and IPv6 capabilities

72

73

## Capabilities

74

75

### Parallel SSH Operations

76

77

Execute commands across multiple hosts simultaneously with comprehensive configuration options, authentication methods, and result handling.

78

79

```python { .api }

80

class ParallelSSHClient:

81

def __init__(self, hosts, user=None, password=None, port=22, pkey=None,

82

num_retries=3, timeout=None, pool_size=100, allow_agent=True,

83

host_config=None, retry_delay=5, proxy_host=None, proxy_port=None,

84

proxy_user=None, proxy_password=None, proxy_pkey=None,

85

forward_ssh_agent=False, keepalive_seconds=60, identity_auth=True,

86

ipv6_only=False): ...

87

88

def run_command(self, command, sudo=False, user=None, stop_on_errors=True,

89

use_pty=False, host_args=None, shell=None, encoding='utf-8',

90

read_timeout=None): ...

91

92

def join(self, output=None, consume_output=False, timeout=None): ...

93

```

94

95

[Parallel Operations](./parallel-operations.md)

96

97

### Single Host SSH Operations

98

99

Connect to and execute commands on individual hosts with the same rich feature set as parallel operations, ideal for single-host workflows.

100

101

```python { .api }

102

class SSHClient:

103

def __init__(self, host, user=None, password=None, port=None, pkey=None,

104

alias=None, num_retries=3, retry_delay=5, allow_agent=True,

105

timeout=None, forward_ssh_agent=False, proxy_host=None,

106

proxy_port=None, proxy_pkey=None, proxy_user=None,

107

proxy_password=None, keepalive_seconds=60, identity_auth=True,

108

ipv6_only=False): ...

109

110

def run_command(self, command, sudo=False, user=None, use_pty=False,

111

shell=None, encoding='utf-8', timeout=None, read_timeout=None): ...

112

```

113

114

[Single Host Operations](./single-host-operations.md)

115

116

### File Transfer Operations

117

118

High-performance file copying between local and remote hosts using both SFTP and SCP protocols, with support for recursive directory operations and per-host file naming.

119

120

```python { .api }

121

# SFTP operations

122

def copy_file(self, local_file, remote_file, recurse=False, copy_args=None): ...

123

def copy_remote_file(self, remote_file, local_file, recurse=False,

124

suffix_separator='_', copy_args=None, encoding='utf-8'): ...

125

126

# SCP operations

127

def scp_send(self, local_file, remote_file, recurse=False, copy_args=None): ...

128

def scp_recv(self, remote_file, local_file, recurse=False, copy_args=None,

129

suffix_separator='_'): ...

130

```

131

132

[File Transfer](./file-transfer.md)

133

134

### Configuration and Host Management

135

136

Flexible per-host configuration system allowing different authentication methods, connection parameters, and proxy settings for individual hosts within parallel operations.

137

138

```python { .api }

139

class HostConfig:

140

def __init__(self, user=None, port=None, password=None, private_key=None,

141

allow_agent=None, alias=None, num_retries=None, retry_delay=None,

142

timeout=None, identity_auth=None, proxy_host=None, proxy_port=None,

143

proxy_user=None, proxy_password=None, proxy_pkey=None,

144

keepalive_seconds=None, ipv6_only=None, cert_file=None,

145

auth_thread_pool=True, gssapi_auth=False,

146

gssapi_server_identity=None, gssapi_client_identity=None,

147

gssapi_delegate_credentials=False, forward_ssh_agent=False): ...

148

```

149

150

[Configuration](./configuration.md)

151

152

### Interactive Shell Sessions

153

154

Open and manage interactive shell sessions on remote hosts for complex multi-command workflows and real-time interaction.

155

156

```python { .api }

157

def open_shell(self, encoding='utf-8', read_timeout=None): ...

158

159

class InteractiveShell:

160

def run(self, cmd): ...

161

def close(self): ...

162

def __enter__(self): ... # Context manager support

163

def __exit__(self, exc_type, exc_val, exc_tb): ...

164

# Properties: stdout, stderr, stdin, exit_code, output

165

166

class Stdin:

167

def write(self, data): ...

168

def flush(self): ...

169

```

170

171

[Interactive Shells](./interactive-shells.md)

172

173

### Output Processing and Result Handling

174

175

Comprehensive result objects providing access to command output, exit codes, and execution metadata for both parallel and single-host operations.

176

177

```python { .api }

178

class HostOutput:

179

# Properties

180

host: str

181

alias: str

182

channel: object

183

stdin: object

184

stdout: generator # Yields output lines

185

stderr: generator # Yields error lines

186

exit_code: int # Command exit code (None until ready)

187

client: object # Reference to SSH client

188

exception: Exception # Exception if any occurred

189

```

190

191

[Output Handling](./output-handling.md)

192

193

## Types

194

195

```python { .api }

196

# Core exceptions

197

class UnknownHostError(Exception): ...

198

class ConnectionError(Exception): ...

199

class AuthenticationError(Exception): ...

200

class Timeout(Exception): ...

201

class SessionError(Exception): ...

202

class SFTPError(Exception): ...

203

class SFTPIOError(SFTPError): ...

204

class SCPError(Exception): ...

205

class ProxyError(Exception): ...

206

class HostArgumentError(Exception): ...

207

class ShellError(Exception): ...

208

class PKeyFileError(Exception): ...

209

class NoIPv6AddressFoundError(Exception): ...

210

class HostConfigError(Exception): ...

211

212

# Constants

213

DEFAULT_RETRIES = 3

214

RETRY_DELAY = 5

215

```