import paramiko
import sys
import getpass
import threading
import os
def pcmd(host,port=22,user='root',passwd=None,cmd=None):
ssh = paramikoSSHClient()
sshset_missing_host_key_policy(paramikoAutoAddPolicy())
sshconnect(host,port=port,username=user,password=passwd)
stdin,stdout,stderr = sshexec_command(cmd)
out = stdoutread()
err = stderrread()
if out:
print(f'[{host}] OUT:\n {outdecode()}')
if err:
print(f'[{host}] ERR:\n {errdecode()}')
if __name__ == '__main__':
#pcmd('127001',passwd='123456',cmd='id root;ls /root')
if len(sysargv) < 3: # 命令加参数长度不能小于3
print(f'usage: {sysargv[0]} ipfile commands')
exit(1)
if not ospathisfile(sysargv[1]): # ip地址文件必须存在
print(f'no such file:{sysargv[1]}')
exit(2)
ipfile = sysargv[1]
cmd = ' 'join(sysargv[2:]) #拼接命令
passwd = getpassgetpass()
with open(ipfile) as fobj:
for line in fobj:
ip = linestrip()#去除行尾\n
pcmd(ip,22,'root',passwd,cmd)
t = threadingThread(target=pcmd,args=(ip,22,'root',passwd,cmd))
tstart()
编辑“/usr/local/python269/lib/python26/site-packages/pexpect/__init__py
”,将“ raise EOF(str(err) + '\n' + str(self))”这段代码注释掉,程序正常运行
有些 UNIX 平台,当你读取一个处于 EOF 状态的文件描述符时,会抛出异常,注释掉就可以了
局域网内有一百多台电脑,全部都是linux *** 作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的。现在有个任务是在这些电脑上执行某些命令,者说进行某些 *** 作,比如安装某些软件,拷贝某些文件,批量关机等。如果一台一台得手工去 *** 作,费时又费力,如果要进行多个 *** 作就更麻烦啦。
或许你会想到网络同传, 网络同传是什么?就是在一台电脑上把电脑装好,配置好,然后利用某些软件,如“联想网络同传”把系统原样拷贝过去,在装系统时很有用,只要在一台电脑上装好,同传以后所有的电脑都装好 *** 作系统了,很方便。同传要求所有电脑硬件完全相同,在联想的电脑上装的系统传到方正电脑上肯定会出问题的。传系统也是很费时间的,根据硬盘大小,如果30G硬盘,100多台电脑大约要传2个多小时,反正比一台一台地安装快!但是如果系统都传完了,发现忘了装一个软件,或者还需要做些小修改,再同传一次可以,但是太慢,传两次半天时间就没了。这时候我们可以利用ssh去控制每台电脑去执行某些命令。
先让我们回忆一下ssh远程登录的过程:首先执行命令 ssh username@1921681x ,第一次登录的时候系统会提示我们是否要继续连接,我们要输入“yes”,然后等一段时间后系统提示我们输入密码,正确地输入密码之后我们就能登录到远程计算机,然后我们就能执行命令了。我们注意到这里面有两次人机交互,一次是输入‘yes’,另一次是输入密码。就是因为有两次交互我们不能简单的用某些命令去完成我们的任务。我们可以考虑把人机交互变成自动交互,python的pexpect模块可以帮我们实现自动交互。
我也遇到了这个问题,发现如下url可能很有帮助:
模拟SSH登陆一台机器并打印磁盘情况,然后退出的例子:
#!/usr/local/python34/bin/python34
import pexpect
ip="1921684622"
name="root"
pwd="abc"
#发送命令执行交互
child=pexpectspawn('ssh %s@%s' % ("root",ip) )
#
childexpect ('password:')
childsendline(pwd)
childexpect('$')
childsendline('df -h')
#发送命令
childsendline("exit")
childinteract()
#关闭pexpect
childclose()
以上就是关于Python-15-ssh_cmd全部的内容,包括:Python-15-ssh_cmd、python脚本ssh命令行可以登录并执行相应命令,但是脚本总是报错,何解、python用ssh连接时,只用ip和用户名但是不需要用到密码,该怎么编程谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)