Python 원격 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 실행 명령 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.