python-paramiko让你远程在服务器上执行命令

2021-01-08  本文已影响0人  糖醋沼跃鱼

本篇文章简述SSHclient对象的常用方法,并提供一个简单用例

connect()

连接到ssh服务器上去并且进行认证,并且会根据主机的秘钥检查服务器的主机秘钥,如果服务器主机的hostname没有在system host keys和local host keys中找到,将会使用缺少主机秘钥的策略,默认的策略是拒绝秘钥并且引发SSHException.

这里如果大家没有用本地的终端通过ssh访问过远程服务器的话,在.ssh文件里的host_key文件是不会保存服务器的秘钥的。就会引发SSHException。

下面介绍几个常用的参数

参数 解释
hostname(str) 需要连接的主机
port(int) 端口号,默认22
username(str) 需要登录的用户名
password(str) 密码
passphrase(str) 解码私钥
pkey(PKey) 可选用于认证的私钥
key_filename(str) 尝试进行身份验证的可选私钥和或证书的文件名或文件名列表

timeout(float): TCP连接的可选超时(以秒为单位)
allow_agent(bool) | 默认为True,设置为False以禁用连接到SSH代理
look_for_keys(bool): 默认为True,设置为False可禁用在〜/.ssh /中搜索可发现的私钥文件

该方法将会抛出的异常:
BadHostKeyException: 如果无法验证服务器的主机秘钥
AuthenticationException: 如果用户认证失败
SSHException: 在SSH会话建立的过程中出现错误

exec_command()

在SSH服务器上执行命令。一个新的Channel将会打开,并执行所请求的命令。命令的输入和输出流作为代表stdin,stdout,stderr。

参数 解释
command(str) 执行的命令
bufsize(int) 解释方式与Python中的内置file()函数相同
timeout(int) 设置命令的channel超时
get_pty(bool) 向服务器请求伪终端(默认为false)

return
返回命令执行后的stdin,stdout,stderr(3-tuple)

raise
抛出SSHException,如果服务端没有正常执行命令

close()

关闭SSHClient和底层的Transport

get_host_keys()

获取到HostKeys对象,可用于检查或更改本地主机密钥。

get_transport()

返回基础Transport对象,可用于执行更底层的任务,例如打开特定种类的channels

load_host_keys(filename)

加载本地的主机密钥文件,可以多次调用此方法。 每个新的主机密钥集将与现有的密钥集合并(如果存在冲突,则用新的旧密钥合并)。 自动保存时,将使用最后一个主机名。

load_system_host_keys(filename=None)

加载系统的主机密钥文件。如果filename保留为None,将尝试从用户的本地“已知主机”文件中读取密钥(由OpenSSH使用),并且如果无法读取该文件,则不会引发异常。这可能仅在posix上有用。

最后发一个简单的用例

from paramiko import SSHClient

client = SSHClient()
client.load_system_host_keys()
client.connect(hostname = "your ip", username= "your username", password = "your password")
stdin,stdout,stderr = client.exec_command("pwd")
print(stdout.read().decode("utf-8"))
client.close()
上一篇下一篇

猜你喜欢

热点阅读