Python 원격 linux 실행 명령 구현

1. linux에 원격 로그인, 사용되는 모듈 파라미코

# 
def ssh(sys_ip,username,password,cmds):
  try
    # ssh 
    client = paramiko.SSHClient()
    # ssh yes no
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 
    client.connect(sys_ip, 22, username=username, password=password, timeout=20)
    # 
    #key_file = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
    #ssh.connect(sys_ip, 22, username=username, pkey=key_file, timeout=20)
    # 
    stdin, stdout, stderr = ssh.exec_command(cmds[key])
    # , list
    result = stdout.readlines()
    return result
  except Exception, e:
    print e
  finally:
    client.close()
 
if __name__=="__main__":
  sys_ip = "192.168.0.102"
  username = "root"
  password = "1"
  cmds = "pwd"
  print ssh(sys_ip,username,password,cmds)
여기에 아이디어가 하나 있습니다. 비밀번호가 로그인할 때 같은python 연결 코드를python 스크립트에 넣고 실행하는 것은 아래의 오류를 보고하는 것입니다. 그러나 코드를python의 상호작용 모드로 복사하여 실행하는 것은 성공입니다. 이때 원격 사용자 ssh 설정이 키보드 상호작용, 키 검증만 지원하는지 확인해야 합니다. 만약에 그렇다면 비밀번호를 사용하여 원격 로그인하면 아래의 오류를 보고합니다.
File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 337, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 528, in _auth
    raise saved_exception
AuthenticationException: Authentication failed.
 
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 337, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 528, in _auth
    raise saved_exception
paramiko.SSHException: No existing session
이것은 linux가 원격 연결에tty(키보드 상호작용)가 있는지 검사하기 때문입니다. 스크립트 방식이 실행될 때 키보드 상호작용이 없습니다. 인터넷에connect 플러스가 있는 것을 보십시오.allow_agent=False,look_for_keys=False 이 두 개의 매개 변수가 해결되었지만, 나의 것은 해결되지 않았다, ssh.connect('localhost',username=name,password=pw,allow_agent=False,look_for_keys=False)
2. ssh를 사용하려면 셸 명령 expect를 사용해야 합니다
먼저 셸 스크립트 remotExect를 만듭니다.sh

#!/usr/bin/expect
set timeout 2
set local_file [lindex $argv 0]
set username  [lindex $argv 1]
set password  [lindex $argv 2]
set hostname  [lindex $argv 3]
set remote_file [lindex $argv 4]
 
spawn scp $local_file $username@$hostname:$remote_file
expect {
"yes/no"# , yes/no 
{send "yes\r";}
"password:"# 
{send "$password\r";}
}
expect eof
그리고python에서 실행합니다.

import os
cpFileCmd = "./remotecp.sh 1.txt root 1 192.168.0.102 /opt/1.txt"
os.system(cpFileCmd)
이 Python 원격 linux 실행 명령 실현에 관한 글은 여기까지 소개되었습니다. 더 많은 Python 원격 linux 실행 명령 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기