EC2 SSH插入其他SSH并运行bash脚本

时间:2018-08-20 01:35:33

标签: python bash amazon-ec2

我将Python程序sshs放入另一个EC2框中,并运行bash脚本。但是,只有在登录后位于默认目录中时,它才会运行bash脚本。这是一些代码。

import boto3
import botocore
import paramiko

s3_client = boto3.client('s3')
s3_client.download_file('mybucket','keys/mykey.pem', '/tmp/mykey.pem')

k = paramiko.RSAKey.from_private_key_file('/tmp/mykey.pem')
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())

print "Connecting to Box"
c.connect( hostname = '99.99.9999', username = 'centos',pkey = k )
print "Connected to Matching Box"

commands = [
    "cd /dir1/dir2/dir3/",         #<-  This isn't working
    "pwd",
    "chmod +x file.sh",
    "nohup ./file.sh > logs/myprogram"
    ]
for command in commands:
    print "Executing {}".format(command)
    stdin , stdout, stderr = c.exec_command(command)
    print stdout.read()
    print stderr.read()

quit() #use return when putting on the handler
{
    'message' : "Script execution completed. See Cloudwatch logs for complete output"
}

问题是没有更改目录。 PWD不断返回默认值,然后显然由于我的bash脚本不存在而引发错误消息。这是一个Centos构建的EC2实例,不确定是否很重要。如果我正常登录并运行相同的更改目录命令,则它可以100%运行。不知道我在做什么错。

1 个答案:

答案 0 :(得分:1)

来自http://docs.paramiko.org/en/2.4/api/client.html#paramiko.client.SSHClient.exec_command/remind #random "yada yada https://www.gebruikercentraal.nl/events.ics." every 3 months

如果正常登录,则所有4条命令将在同一通道中执行,因此A new Channel is opened and the requested command is executed.生效。但是,当您在cd的循环中执行它们时,会生成并销毁4个通道(可能是4个exec_command()进程),因此bash不会持久。

$PWD

这可以解决问题。