복붙노트

[PYTHON] ssh를 사용하여 파이썬에서 원격으로 스크립트를 실행하는 방법?

PYTHON

ssh를 사용하여 파이썬에서 원격으로 스크립트를 실행하는 방법?

def execute(self,command):
            to_exec = self.transport.open_session()
            to_exec.exec_command(command)
            print 'Command executed'
connection.execute("install.sh")

원격 시스템을 검사 할 때 스크립트가 실행되지 않는 것을 발견했습니다. 어떤 단서?

해결법

  1. ==============================

    1.아래 코드는 원하는대로 할 것이고 execute 함수에 적용 할 수 있습니다.

    아래 코드는 원하는대로 할 것이고 execute 함수에 적용 할 수 있습니다.

    from paramiko import SSHClient
    host="hostname"
    user="username"
    client = SSHClient()
    client.load_system_host_keys()
    client.connect(host, username=user)
    stdin, stdout, stderr = client.exec_command('./install.sh')
    print "stderr: ", stderr.readlines()
    print "pwd: ", stdout.readlines()
    

    하지만 명령은 $ HOME 디렉토리로 기본 설정됩니다. 따라서 $ PATH에 install.sh가 있어야하거나 install.sh 스크립트가 들어있는 디렉토리로 이동해야합니다 (대부분). .

    다음을 사용하여 기본 경로를 확인할 수 있습니다.

    stdin, stdout, stderr = client.exec_command('getconf PATH')
    print "PATH: ", stdout.readlines()
    

    그러나 경로에 없다면 다음과 같이 스크립트를 실행하고 실행할 수 있습니다.

    stdin, stdout, stderr = client.exec_command('(cd /path/to/files; ./install.sh)')
    print "stderr: ", stderr.readlines()
    print "pwd: ", stdout.readlines()
    

    스크립트가 $ PATH에 없으면 명령 줄에 있던 것처럼 install.sh 대신 ./install.sh를 사용해야합니다.

    위의 모든 사항을 수행 한 후에도 여전히 문제가 발생하면 install.sh 파일의 사용 권한도 확인하는 것이 좋습니다.

    stdin, stdout, stderr = client.exec_command('ls -la install.sh')
    print "permissions: ", stdout.readlines()
    
  2. ==============================

    2.

    ssh = paramiko.client.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
    ssh.connect(hostname=host, username=username, password = password)
    chan = ssh.invoke_shell()
    
    def run_cmd(cmd):    
        print('='*30)
        print('[CMD]', cmd)
        chan.send(cmd + '\n')
        time.sleep(2)
        buff = ''
        while chan.recv_ready():
            print('Reading buffer')
            resp = chan.recv(9999)
            buff = resp.decode()
            print(resp.decode())
    
            if 'password' in buff:
                time.sleep(1)
                chan.send(password + '\n')        
            time.sleep(2)
    
        print('Command was successful: ' + cmd)
    
  3. ==============================

    3.

    subprocess.Popen('ssh thehost install.sh')
    

    하위 프로세스 모듈을 참조하십시오.

  4. from https://stackoverflow.com/questions/8783009/how-to-execute-a-script-remotely-in-python-using-ssh by cc-by-sa and MIT license