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

Python EC2 SSH';插入其他SSH并运行bash脚本,python,bash,amazon-ec2,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_pri

我将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"
}
导入boto3
导入botocore
进口帕拉米科
s3\u client=boto3.client('s3'))
s3_client.download_文件('mybucket','keys/mykey.pem','tmp/mykey.pem'))
k=paramiko.RSAKey.from_private_key_文件('/tmp/mykey.pem'))
c=paramiko.SSHClient()
c、 设置缺少主机密钥策略(paramiko.AutoAddPolicy())
打印“连接到盒子”
c、 连接(主机名='99.99.9999',用户名='centos',pkey=k)
打印“已连接到匹配框”
命令=[
“cd/dir1/dir2/dir3/”,#来自:
打开一个新频道并执行请求的命令。

如果您正常登录,所有4个命令都将在同一个通道中执行,因此
cd
将生效。但是当您在
exec_command()
s的循环中执行它们时,4个通道(可能是4个
bash
进程)将生成并销毁,因此
$PWD
不会持续

command = 'cd /dir1/dir2/dir3/; pwd; chmod +x file.sh; nohup ./file.sh > logs/myprogram'
stdin, stdout, stderr = c.exec_command(command)

那就可以了。

把所有命令合并成一行怎么样,比如
cd/dir1/dir2/dir3/;pwd;chmod…
?我不知道确切的原因,只是一个可以帮助调试的粗略猜测。嘿,这比我现在的位置好。我会尝试一下并报告。如果仍然不能解决问题,尝试添加一行
sudo-我
在命令的开头。@ChangQian成功了。如果您添加作为答案,我将接受。谢谢大家。完成并添加了参考。