SSHClient类是一个SSH服务会话的高级表示,该类封装了传输(transport),通道(channel)及SFTPClient的校验,建立的方法,通常用于执行远程命令。有如下方法:
(1)ssh远程连接服务器
connect(self, hostkey=None, username='', password=None, pkey=None,gss_host=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True)
参数说明:
hostname(str类型):连接的目标主机地址
port(int类型):连接目标主机的端口,默认为22
username(str类型):用户名
password(str类型):密码
pkey(PKey类型):私钥方式,用于身份验证
key_filename(str o list(str)类型):一个文件名或文件名的列表,用于私钥的身份验证
timeout(float类型):一个可选的超时时间(已秒为单位)的TCP连接
allow_agent(bool类型):设置为False时用于禁用连接到SSH代理
look_for_keys(bool类型):设置为False时用来禁用在~/.ssh中搜索秘钥文件
compress(bool类型):设置为True时打开压缩
(2)远程主机没有本地主机密钥或HostKeys对象时的连接方法。
格式为:set_missing_host_key_policy(policy)。
其中policy参数常见取值有3种,分别如下:
AutoAddPolicy(最常用):
自动添加主机名及主机密钥到本地的known_hosts,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认。
RejectPolicy(默认):
自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项
WarningPolicy:
用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接。
(3)远程执行命令,
函数格式:exec_command(command, bufsize=-1, timeout=None, get_pty=False, environment=None)
该命令的输入与输入流为标准输入(stdin)、输出(stdout)、错误(stderr)
(4)在远程服务器上生成新的交互式shell。
函数格式为:invoke_shell(term='vt100', width=80, height=24, width_pixels=0, height_pixels=0, environment=None)。
exec_command和invoke_shell区别
exec_command使用的是SSH exec channel的方式执行,不具备持久化的能力,也就是每次运行都是一次全新的环境,不是说你先切换到root,下一
条命令运行就是以root执行了,说简单点就是把命令当作参数发送出去
适合场景:不想使用终端仿真;不执行诸如分页,着色和主要是交互式确认之类的操作,有一个典型的坑,不能使用nohup
invoke_shell使用的是SSH shell channel的方式执行,具备持久化能力,就类似和我们平时用MobaXterm,xshell等这些终端软件连接上去一样
适合场景:需要一些持久化的操作;需要使用一些交互式命令
(5)load_system_host_keys方法
load_system_host_keys(self, filename)
加载本地总要校验文件,默认为~/.ssh/known_hosts,非默认另需要手工指定。
参数说明:
filename(str类型)指定远程主机公钥记录文件