ssh的介绍
ssh是什么?
SSH是一种网络协议,用于计算机之间的加密登录。
SSH之所以能够保证安全,原因在于它采用了公钥加密。
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。
pexpect库
Pxssh是pexpect库的ssh专用脚本,他能用预先写好的 login()、logout() 和 prompt() 等函数直接与SSH进行交互 。对于login()函数,如果执行成功则不会抛出异常,将显示消息表示密码已经找到并把表示密码已找到的全局布尔值设置为true,如果异常显示密码被拒绝则返回即可,如果异常显示socket为 "read_nonblocking" 则可能是SSH服务器被大量的连接刷爆了。
实践
import pexpect #引入第三方库
PROMPT = ['#','>>> ','> ','\$ '] #命令行提示符
def send_command(child,cmd): #传递命令
child.sendline(cmd)
child.expect(PROMPT) #期望获得命令提示符
print(child.before) #打印会话结果
def connect(user,host,password): #连接函数
ssh_netkey='are you sure you want to continue'
connStr='ssh'+user+'@'+host #连接字符串
child=pexpect.spawn(connStr) #实列化连接
ret=child.expect([pexpect.TIMEOUT,ssh_netkey,'[P|p]assword:']) #捕获ssh_newkey
if ret==0: #判断捕获结果
print('Error Connection')
return
if ret==1:
child.sendline('yes')
ret=child.expect([pexpect.TIMEOUT,ssh_netkey,'[p|P]assword:'])
if ret==0:
print('Errot Connecting')
return
child.sendline(password) #输入密码
child.expect(PROMPT) #获得提示符
return child
def main():
host='localhost'
user='root'
password='Simplexue123'
child=connect(user,host,password) #ssh连接
send_command(child,'ls /root/') #发送命令
if if __name__ == '__main__':
main()