大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。
使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。
安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块。
通常安装标准的python模块,只需要在模块的根目录下运行:
1 2 | python setup . py build python setup . py install |
备注:安装前先检查是否安装gcc(yum -y install gcc)
1 2 3 4 | wget tar – zxvf pycrypto – 2.6.tar.gz cd pycrypto – 2.6 / python setup . py build && python setup . py install |
测试:
1 | python >> import Crypto |
(编译时报错:error: command ‘gcc’ failed with exit status 1;这是因为缺少python-dev的软件包,所yum -y install python-devel)
1 2 3 4 5 | wget http : //www.trustauth.cn/paramiko/download/paramiko-1.7.7.1.tar.gz tar xvzf paramiko – 1.7.7.1.tar.gz cd paramiko – 1.7.7.1 / python setup . py build && python setup . py install Crypto error : ‘module’ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC’ |
测试:
1 2 | python >> import paramiko ( Crypto error : ‘module’ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC’ |
找到 /usr/lib/python2.7/site-packages/Crypto/Util/number.py
把
1 | if _fastmath is not None and not _fastmath . HAVE_DECL_MPZ_POWM_SEC : |
注释了
1 | #if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC: |
3、使用
1 2 3 4 5 6 7 8 9 | #!/usr/bin/python import paramiko ssh = paramiko . SSHClient ( ) ssh . set_missing_host_key_policy ( paramiko . AutoAddPolicy ( ) ) ssh . connect ( “某IP地址” , 22 , “用户名” , “口令” ) stdin , stdout , stderr = ssh . exec_command ( “你的命令” ) print stdout . readlines ( ) ssh . close ( ) |
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/python import paramiko t = paramiko . Transport ( ( “某IP地址” , 22 ) ) t . connect ( username = “用户名” , password = “口令” ) sftp = paramiko . SFTPClient . from_transport ( t ) remotepath = ‘/tmp/test.txt’ localpath = ‘/tmp/test.txt’ sftp . put ( localpath , remotepath ) t . close ( ) |
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/python import paramiko t = paramiko . Transport ( ( “某IP地址” , 22 ) ) t . connect ( username = “用户名” , password = “口令” ) sftp = paramiko . SFTPClient . from_transport ( t ) remotepath = ‘/tmp/test.txt’ localpath = ‘/tmp/test.txt’ sftp . get ( remotepath , localpath ) t . close ( ) |
文章转载来自:trustauth.cn