机器A上执行Python代码登录连接到机器B,然后在机器B上执行命令
- #!/usr/bin/env python
- #coding=utf-8
-
- import paramiko, getpass,sys,traceback
-
- class sshDemo():
- def login_by_passwd(self, ip, port, username, passwd):
- self.ip = ip
- self.port = port
- self.username = username
- self.passwd = passwd
- self.pkey = None
-
- def login(self, username, key_path, passwd):
- try:
- self.pkey=paramiko.RSAKey.from_private_key_file(key_path)
- except paramiko.PasswordRequiredException:
- if not passwd:
- passwd = getpass.getpass('RSA key password: ')
- self.pkey = paramiko.RSAKey.from_private_key_file(key_path, passwd)
-
- def ssh(self,shell):
- try:
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- if self.pkey:
- ssh.connect(self.ip, self.port, self.username, compress = True, pkey= self.pkey)
- else:
- if not self.passwd:
- self.passwd = getpass.getpass('input password: ')
- ssh.connect(self.ip,self.port,self.username, self.passwd)
- stdin, stdout, stderr = ssh.exec_command(shell)
- res = stdout.readlines()
- ssh.close()
- return res
- except:
- type, value, tb = sys.exc_info()
- return traceback.format_exception(type, value, tb)
-
-
-
- if __name__ == '__main__':
- myssh = sshDemo()
- myssh.login("10.10.10.10",22,"nio4444","nio4444")
- myssh.ssh("cd /tmp/ && tar -zcf fstab.tgz fstab")