1、Paramiko模块简介
Paramiko是一个第三方模块,需要额外安装使用,该模块通过SSHv2协议登陆网络设备。有很多的模块在使用SSH和SCP功能的时候,都会依赖于这个模块,比如我们熟知的Ansible、Nornir、Netmiko等。
2、Paramiko官方链接
http://www.paramio.org/
3、SSHClient()
实例化
4、方法
set_missing_host_key_policy(self, policy)
- 默认拒绝:RejectPolicy
自动添加:AutoAddpolicy
- 告警:WarningPolicy
connect()
- hostname
- port=22
- username
- password
- look_for_keys=True:默认是False。如果python环境运行在Linux下,建议关闭(look_for_keys=False),否则报错
AuthenticationException:Authentication failed
。 - allow_agent=True:用于使用密钥,agent管理用户名和密码。仅用户名和密码登陆,可关闭。
exec_command()
执行一条命令,执行完成之后就关闭channel。返回一个三元组:stdin、stdout、stderr。
invoke_shell()
与服务器交互式会话。
默认参数:
- term=‘vt100’
- width=80
- height=24
send()
发送命令。每send一次,后面最好加time.sleep()。
close()
关闭SSH连接。
5、ssh_exception
- SSHException():SSHv2协商或是逻辑问题
AuthenticationException()
:认证失败- PasswordRequiredException():需要私钥文件
- BadAuthenticationType():认证类型不对;远端可能支持public-key方式
- PartialAuthentication():部分身份验证情况下引发的内部异常
- ChannelException():尝试打开新通道引发的异常
- BadHostKeyException(SSHException):双方host-key不匹配
- ProxyCommandFailure(SSHException):查找ProxyCommand失败
- NoValidConnectionError(socket.error):不可用的连接
- CouldNotCanonicalize(SSHException):hostname canonicalization fails & fallback is disabled
- ConfigParseError(SSHException):解析SSH Config data错误
6、安装paramiko模块
pip install paramiko # 第三方模块需要通过pip安装
安装paramiko时报错:
WARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.
You should consider upgrading via the ‘D:\program\Python310\python.exe -m pip install --upgrade pip’ command.
使用pip install --upgrade pip
升级pip时,报错:ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘D:\program\Python310\~cripts\pip.exe’。不用理会该错误,使用pip -V
命令查看,pip已经升级至22.3.1版本。
再次使用pip install paramiko
命令安装paramiko模块成功。
PS D:\code> pip install paramiko
Collecting paramiko
Downloading paramiko-2.12.0-py2.py3-none-any.whl (213 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 213.1/213.1 KB 12.1 kB/s eta 0:00:00
Collecting bcrypt>=3.1.3
Downloading bcrypt-4.0.1-cp36-abi3-win_amd64.whl (152 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.9/152.9 KB 14.4 kB/s eta 0:00:00
Collecting cryptography>=2.5
Downloading cryptography-38.0.4-cp36-abi3-win_amd64.whl (2.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 15.7 kB/s eta 0:00:00
Collecting pynacl>=1.0.1
Downloading PyNaCl-1.5.0-cp36-abi3-win_amd64.whl (212 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 212.1/212.1 KB 10.8 kB/s eta 0:00:00
Collecting six
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting cffi>=1.12
Downloading cffi-1.15.1-cp310-cp310-win_amd64.whl (179 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 179.1/179.1 KB 15.7 kB/s eta 0:00:00
Collecting pycparser
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 30.7/118.7 KB 3.2 kB/s eta 0:00:28
ERROR: Exception:
Traceback (most recent call last):
File "D:\program\Python310\lib\site-packages\pip\_vendor\urllib3\response.py", line 438, in _error_catcher
yield
File "D:\program\Python310\lib\site-packages\pip\_vendor\urllib3\response.py", line 519, in read
data = self._fp.read(amt) if not fp_closed else b""
File "D:\program\Python310\lib\site-packages\pip\_vendor\cachecontrol\filewrapper.py", line 90, in read
data = self.__fp.read(amt)
File "D:\program\Python310\lib\http\client.py", line 465, in read
s = self.fp.read(amt)
File "D:\program\Python310\lib\socket.py", line 705, in readinto
return self._sock.recv_into(b)
File "D:\program\Python310\lib\ssl.py", line 1274, in recv_into
return self.read(nbytes, buffer)
File "D:\program\Python310\lib\ssl.py", line 1130, in read
return self._sslobj.read(len, buffer)
TimeoutError: The read operation timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\program\Python310\lib\site-packages\pip\_internal\cli\base_command.py", line 167, in exc_logging_wrapper
status = run_func(*args)
File "D:\program\Python310\lib\site-packages\pip\_internal\cli\req_command.py", line 205, in wrapper
return func(self, options, args)
File "D:\program\Python310\lib\site-packages\pip\_internal\commands\install.py", line 339, in run
requirement_set = resolver.resolve(
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 94, in resolve
result = self._result = resolver.resolve(
File "D:\program\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 481, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "D:\program\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 373, in resolve
failure_causes = self._attempt_to_pin_criterion(name)
File "D:\program\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 213, in _attempt_to_pin_criterion
criteria = self._get_updated_criteria(candidate)
File "D:\program\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 204, in _get_updated_criteria
self._add_to_criteria(criteria, requirement, parent=candidate)
File "D:\program\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 172, in _add_to_criteria
if not criterion.candidates:
File "D:\program\Python310\lib\site-packages\pip\_vendor\resolvelib\structs.py", line 151, in __bool__
return bool(self._sequence)
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 155, in __bool__
return any(self)
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 143, in <genexpr>
return (c for c in iterator if id(c) not in self._incompatible_ids)
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 47, in _iter_built
candidate = func()
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 215, in _make_candidate_from_link
self._link_candidate_cache[link] = LinkCandidate(
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 288, in __init__
super().__init__(
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 158, in __init__
self.dist = self._prepare()
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 227, in _prepare
dist = self._prepare_distribution()
File "D:\program\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 299, in _prepare_distribution
return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
File "D:\program\Python310\lib\site-packages\pip\_internal\operations\prepare.py", line 487, in prepare_linked_requirement
return self._prepare_linked_requirement(req, parallel_builds)
File "D:\program\Python310\lib\site-packages\pip\_internal\operations\prepare.py", line 532, in _prepare_linked_requirement
local_file = unpack_url(
File "D:\program\Python310\lib\site-packages\pip\_internal\operations\prepare.py", line 214, in unpack_url
file = get_http_url(
File "D:\program\Python310\lib\site-packages\pip\_internal\operations\prepare.py", line 94, in get_http_url
from_path, content_type = download(link, temp_dir.path)
File "D:\program\Python310\lib\site-packages\pip\_internal\network\download.py", line 146, in __call__
for chunk in chunks:
File "D:\program\Python310\lib\site-packages\pip\_internal\cli\progress_bars.py", line 304, in _rich_progress_bar
for chunk in iterable:
File "D:\program\Python310\lib\site-packages\pip\_internal\network\utils.py", line 63, in response_chunks
for chunk in response.raw.stream(
File "D:\program\Python310\lib\site-packages\pip\_vendor\urllib3\response.py", line 576, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "D:\program\Python310\lib\site-packages\pip\_vendor\urllib3\response.py", line 512, in read
with self._error_catcher():
File "D:\program\Python310\lib\contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "D:\program\Python310\lib\site-packages\pip\_vendor\urllib3\response.py", line 443, in _error_catcher
raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
WARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.
You should consider upgrading via the 'D:\program\Python310\python.exe -m pip install --upgrade pip' command.
PS D:\code>
PS D:\code> pip install --upgrade pip
Requirement already satisfied: pip in d:\program\python310\lib\site-packages (22.0.4)
Collecting pip
Downloading pip-22.3.1-py3-none-any.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 1.9 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 22.0.4
Uninstalling pip-22.0.4:
Successfully uninstalled pip-22.0.4
ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: 'D:\\program\\Python310\\~cripts\\pip.exe'
Consider using the `--user` option or check the permissions.
PS D:\code> pip -V
pip 22.3.1 from D:\program\Python310\lib\site-packages\pip (python 3.10)
PS D:\code> pip install paramiko
Collecting paramiko
Using cached paramiko-2.12.0-py2.py3-none-any.whl (213 kB)
Collecting pynacl>=1.0.1
Using cached PyNaCl-1.5.0-cp36-abi3-win_amd64.whl (212 kB)
Collecting six
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting cryptography>=2.5
Using cached cryptography-38.0.4-cp36-abi3-win_amd64.whl (2.4 MB)
Collecting bcrypt>=3.1.3
Using cached bcrypt-4.0.1-cp36-abi3-win_amd64.whl (152 kB)
Collecting cffi>=1.12
Using cached cffi-1.15.1-cp310-cp310-win_amd64.whl (179 kB)
Collecting pycparser
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.7/118.7 kB 407.7 kB/s eta 0:00:00
Installing collected packages: six, pycparser, bcrypt, cffi, pynacl, cryptography, paramiko
Successfully installed bcrypt-4.0.1 cffi-1.15.1 cryptography-38.0.4 paramiko-2.12.0 pycparser-2.21 pynacl-1.5.0 six-1.16.0